I'm getting multiple exception errors resulting in a segfault when trying
to control how long SageMath spends on structure_description() of a finite
group. I'll attach a MWE and traceback, but basically what I'm doing is:
creating a Finite Group with ~10-20 generators and ~half that relations.
Setting an alarm...
running structure_description() with three possible outcomes of
try...except:
* it works, tell me the result
* it fails, GAP knows why and I take over
* It fails because of the alarm timeout
Running this code in a loop eventually results in a segfault, probably with
some conflict between the alarm and GAP exceptions, but the traceback
suggests it's a problem in the free_group module...anyone have any thoughts?
[running code resulting in crash]
Group Type is: --
20 [[9, 6, 2, 8], [8, 8], [10], [7, 2, 14, 4], [8], [14, 2, 6], [2, 10],
[7, 9, 2], [10, 6, 8, 2], [13, 6, 11, 8], [3], [3]]
Finitely presented group < x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10,
x11, x12, x13, x14 | x8*x5*x1*x7, x7^2, x9, x6*x1*x13*x3, x7, x13*x1*x5,
x1*x9, x6*x8*x1, x9*x5*x7*x1, x12*x5*x10*x7, x2, x2 >
Some Unhandled exception!
Group Type is: --
21 [[5, 11, 6, 11], [1], [7, 11, 12], [14, 4], [7], [1], [10, 4], [14], [8,
11, 10, 1], [10, 10, 4], [10, 12], [12, 10, 14, 10]]
Traceback (most recent call last):
File
"/home/cduston/Downloads/SageMath/local/lib/python3.7/site-packages/sage/groups/free_group.py",
line 881, in _element_constructor_
P = x.parent()
AttributeError: 'list' object has no attribute 'parent'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "MWE.sage.py", line 39, in
G=H/[H(Y[i]) for i in range(g*V)]
File "MWE.sage.py", line 39, in
G=H/[H(Y[i]) for i in range(g*V)]
File "sage/structure/parent.pyx", line 900, in
sage.structure.parent.Parent.__call__
(build/cythonized/sage/structure/parent.c:9218)
File "sage/structure/coerce_maps.pyx", line 156, in
sage.structure.coerce_maps.DefaultConvertMap_unique._call_
(build/cythonized/sage/structure/coerce_maps.c:4448)
File
"/home/cduston/Downloads/SageMath/local/lib/python3.7/site-packages/sage/groups/free_group.py",
line 883, in _element_constructor_
return self.element_class(self, x, **kwds)
File
"/home/cduston/Downloads/SageMath/local/lib/python3.7/site-packages/sage/groups/free_group.py",
line 230, in __init__
AbstractWordTietzeWord = libgap.eval('AbstractWordTietzeWord')
File "sage/libs/gap/libgap.pyx", line 400, in
sage.libs.gap.libgap.Gap.eval (build/cythonized/sage/libs/gap/libgap.c:4205)
File "sage/libs/gap/util.pyx", line 395, in sage.libs.gap.util.gap_eval
(build/cythonized/sage/libs/gap/util.c:5990)
cysignals.signals.SignalError: Segmentation fault
--
You received this message because you are subscribed to the Google Groups
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to sage-support+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/sage-support/36aed71a-552b-4e09-a3ab-172a50d90547n%40googlegroups.com.
"""
This script will try to replicate the multiple exception call
errors I am getting without all the excess baggage associated with
the Fox Algorithm.
"""
g=3 # Covers, but this is just a multiplicative factor here
E=5 # edges in the graph
V=4 # Sides in the graph (relations)
W=5 # Max word size for the relations
H=FreeGroup(E*g)
N=1000
ExCases = 0 # To keep track of exceptional cases
for i in range(N):
# Randomly create some relations
Y = []
for j in range(V*g):
YY = []
for k in range(randrange(1,W)):
num = randrange(1,g*E)
sign = randrange(1,2) # positive or negative
if sign == 1:
YY.append(num)
elif sign == 2:
YY.append(-num)
#print(YY)
Y.append(YY)
print(i,Y)
# Now calculate the structure of the group
G=H/[H(Y[i]) for i in range(g*V)]
print(G)
alarm(5)
try:
grpstr = str(G.structure_description())
except ValueError:
if G.simplified().relations() == ():
grpstr = "F" + str(G.simplified().ngens())
else:
grpstr = "--"
ExCases += 1
pass
except AlarmInterrupt:
grpstr = "--"
ExCases += 1
pass
except:
print("Some Unhandled exception!")
cancel_alarm()
print("Group Type is:",grpstr)
print("Exceptional cases:",ExCases)