M2
M2 copied to clipboard
irreducibleCharacteristicSeries segfault
should probably be fixed, it's annoying:
i1 : R=QQ[x]
o1 = R
o1 : PolynomialRing
i2 : I=ideal R
o2 = ideal ()
o2 : Ideal of R
i3 : irreducibleCharacteristicSeries I
-- SIGSEGV
-* stack trace, pid: 15915
0# boost::stacktrace::basic_stacktrace<std::allocator<boost::stacktrace::frame> >::basic_stacktrace() at /usr/include/boost/stacktrace/stacktrace.hpp:129
1# segv_handler at /home/pzinn/M2/M2/Macaulay2/bin/main.cpp:249
2# 0x00007F6DFE44FD00 in /lib64/libc.so.6
3# get_max_var(List<CanonicalForm> const&) in /lib64/libfactory-4.4.0.so
4# neworder(List<CanonicalForm> const&) in /lib64/libfactory-4.4.0.so
5# neworderint(List<CanonicalForm> const&) in /lib64/libfactory-4.4.0.so
6# rawIdealReorder at /home/pzinn/M2/M2/Macaulay2/e/interface/factory.cpp:790
7# interface_rawIdealReorder at /home/pzinn/M2/M2/BUILD/fedora/Macaulay2/d/interface-tmp.cc:1483
8# evaluate_evalraw at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:1492
9# evaluate_evalraw at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:1529
10# evaluate_evalraw at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:1600
11# evaluate_applyFCE at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:805
12# evaluate_evalraw at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:1501 (discriminator 1)
13# evaluate_evalexcept at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:1650
14# readeval3(parse_TokenFile_struct*, char, parse_DictionaryClosure_struct*, char, char, char) at /home/pzinn/M2/M2/Macaulay2/d/interp.dd:187
15# loadprint(M2_string_struct*, parse_DictionaryClosure_struct*, char) at /home/pzinn/M2/M2/Macaulay2/d/interp.dd:357
16# commandInterpreter_2(tagged_union*) at /home/pzinn/M2/M2/Macaulay2/d/interp.dd:477 (discriminator 1)
17# evaluate_evalraw at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:1492
18# evaluate_evalraw at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:1529
19# evaluate_evalraw at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:1596
20# evaluate_evalexcept at /home/pzinn/M2/M2/Macaulay2/d/evaluate.d:1650
21# readeval3(parse_TokenFile_struct*, char, parse_DictionaryClosure_struct*, char, char, char) at /home/pzinn/M2/M2/Macaulay2/d/interp.dd:187
22# readeval(parse_TokenFile_struct*, char, char) at /home/pzinn/M2/M2/Macaulay2/d/interp.dd:294 (discriminator 1)
23# interp_process at /home/pzinn/M2/M2/Macaulay2/d/interp.dd:626 (discriminator 1)
24# interpFunc(ArgCell*) at /home/pzinn/M2/M2/Macaulay2/bin/main.cpp:201
25# ThreadTask::run(SupervisorThread*) at /home/pzinn/M2/M2/Macaulay2/system/supervisor.cpp:359 (discriminator 1)
26# SupervisorThread::threadEntryPoint() at /home/pzinn/M2/M2/Macaulay2/system/supervisor.cpp:404
27# SupervisorThread::threadEntryPoint(void*) at /home/pzinn/M2/M2/Macaulay2/system/supervisor.hpp:89
28# 0x00007F6DFFEE1AF6 in /lib64/libgc.so.1
29# GC_call_with_stack_base in /lib64/libgc.so.1
30# 0x00007F6DFE4A66D7 in /lib64/libc.so.6
31# 0x00007F6DFE52A60C in /lib64/libc.so.6
-- end stack trace *-
oh, is it a factory bug?
The segfault is happening in factory, but it's because we're calling a factory function with an empty list. So we should probably check that it's nonempty first.
#3499 provides a partial fix (no more segfault, just an error), though it would be better if it returned something like ({},id_R).
Unrelatedly, note the rather cryptic error message
i1 : irreducibleCharacteristicSeries ideal()
stdio:1:31:(3): error: expected argument 1 to be a hash table
The weird error message is coming from factoryGood:
i1 : errorDepth = 1
o1 = 1
i2 : irreducibleCharacteristicSeries ideal ZZ
/usr/share/Macaulay2/Core/enginering.m2:295:58:(1):[2]: error: expected argument 1 to be a hash table
/usr/share/Macaulay2/Core/enginering.m2:295:58:(1):[2]: --entering debugger (type help to see debugger commands)
/usr/share/Macaulay2/Core/enginering.m2:295:47-295:67: --source code:
factoryGood = R -> factoryAlmostGood R and not (options R).Inverses
But options ZZ returns null. This is also true for QQ and ZZ/p.