1 | initial version |
If F
is a finite field implemented via Givaro,
multivariate polynomials over F
seem very fragile.
Below is a simpler reproducer for the bug.
The bug disappears when removing impl='givaro'
.
It also disappears when using f = a
instead of f = -a
.
sage: p = 3
sage: F = GF(p, impl='givaro')
sage: R.<a, b> = F[]
sage: f = -a
sage: f.dict()
------------------------------------------------------------------------
(no backtrace available)
------------------------------------------------------------------------
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.
------------------------------------------------------------------------
.../src/bin/sage-python: line 2: 22824 Segmentation fault: 11 sage -python "$@"
2 | No.2 Revision |
If Multivariate polynomials over F
is a finite field implemented via Givaro,
multivariate Givaro finite fields seem very fragile.F
Below is are a few simpler reproducer reproducers for the bug.
The bug disappears when removing crash.
It seems the crash
impl='givaro'
.It also disappears when using f = a
instead
f = -a
.p
(I tried 3, 31, 229)Common preamble in long form:
sage: p = 3
sage: F = GF(p, impl='givaro')
sage: R.<a, b> = F[]
sage: f =
or in short form:
sage: R.<a, b> = GF(3, impl='givaro')[]
Define a few polynomials (g
and h
are the same when p = 3
):
sage: f, g, h = a, 2*a, -a
Then f
behaves well but g
and h
don't.
Multivariate polynomials over Givaro finite fields seem very fragile.
Below are a few simpler reproducers for the crash.
It seems the crash
impl='givaro'
.p
(I tried 3, 31, 229)Common preamble in long form:
sage: p = 3
sage: F = GF(p, impl='givaro')
sage: R.<a, b> = F[]
or in short form:
sage: R.<a, b> = GF(3, impl='givaro')[]
Define a few polynomials (g
and h
are the same when p = 3
):
sage: f, g, h = a, 2*a, -a
Then f
behaves well but g
and h
don't.
These commands work:
sage: f.dict()
{(1, 0): 1}
sage: f[a]
a
These commands work:
sage: f.dict()
{(1, 0): 1}
sage: f[a]
a
sage: f[b], g[b], h[b]
(0, 0, 0)
But the following commands crash:
sage: g.dict()
<CRASH>
sage: g[a]
<CRASH>
sage: h.dict()
<CRASH>
sage: h[a]
<CRASH>
Where <CRASH>
is:
------------------------------------------------------------------------
(no backtrace available)
------------------------------------------------------------------------
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.
------------------------------------------------------------------------
.../src/bin/sage-python: line 2: 22824 ... Segmentation fault: 11 sage -python "$@"
The fragility seems connected to scalars other than 0 and 1.
Not sure if this is related: the finite field list is ordered differently in the Givaro implementation:
sage: GF(3).list()
[0, 1, 2]
sage: GF(3, impl='givaro').list()
[0, 2, 1]
3 | No.3 Revision |
Multivariate polynomials over Givaro finite fields seem very fragile.
Below are a few simpler reproducers for the crash.
Their dict
and __getitem__
methods crash easily. It seems the crash
p
(tried 3, 31, 229)impl='givaro'
p
(I tried 3, 31, 229)Common preamble in long form:
sage: p = 3
sage: F = GF(p, impl='givaro')
sage: R.<a, b> = F[]
or in short form:Here are a few simple reproducers for the crash, with Sage 9.2.beta13.
sage: R.<a, b> = GF(3, impl='givaro')[]
Define a few polynomials (g
and h
are the same when p = 3
):
sage: f, g, h = a, 2*a, -a
Then f
behaves well but g
and h
don't.
Multivariate polynomials over Givaro finite fields seem very fragile.
Below are a few simpler reproducers for the crash.
It seems the crash
impl='givaro'
.p
(I tried 3, 31, 229)Common preamble in long form:
sage: p = 3
sage: F = GF(p, impl='givaro')
sage: R.<a, b> = F[]
or in short form:
sage: R.<a, b> = GF(3, impl='givaro')[]
Define a few polynomials (g
and h
are the same when p = 3
):
sage: f, g, h = a, 2*a, -a
Then f
behaves well but g
and h
don't.
These commands work:
sage: f.dict()
{(1, 0): 1}
sage: f[a]
a
These commands work:
sage: f.dict()
{(1, 0): 1}
sage: f[a]
a
sage: f[b], g[b], h[b]
(0, 0, 0)
But the following commands crash:
sage: g.dict()
<CRASH>
sage: g[a]
<CRASH>
sage: h.dict()
<CRASH>
sage: h[a]
<CRASH>
Where where <CRASH>
is:
------------------------------------------------------------------------
(no backtrace available)
------------------------------------------------------------------------
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.
------------------------------------------------------------------------
.../src/bin/sage-python: .../bin/sage-python: line 2: ... Segmentation fault: 11 ... sage -python "$@"
By contrast, these commands work:
sage: f.dict()
{(1, 0): 1}
sage: f[a]
a
sage: f[b], g[b], h[b]
(0, 0, 0)
The fragility crash thus seems connected to scalars other than 0 and 1.
Not sure if this is related: the finite field list is ordered differently in the Givaro implementation:
sage: GF(3).list()
[0, 1, 2]
sage: GF(3, impl='givaro').list()
[0, 2, 1]