Skip to content

Commit ecf7d96

Browse files
committed
gap: revise make_gap_list, make_gap_matrix
1 parent 543f8d6 commit ecf7d96

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

src/sage/libs/gap/element.pyx

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,16 +47,23 @@ cdef Obj make_gap_list(sage_list) except NULL:
4747
4848
The list of the elements in ``a`` as a Gap ``Obj``.
4949
"""
50-
cdef GapElement l = libgap.eval('[]')
50+
cdef Obj l
5151
cdef GapElement elem
52-
for x in sage_list:
53-
if not isinstance(x, GapElement):
54-
elem = <GapElement>libgap(x)
55-
else:
56-
elem = <GapElement>x
52+
cdef int i
53+
try:
54+
GAP_Enter()
55+
l = GAP_NewPlist(0)
5756

58-
AddList(l.value, elem.value)
59-
return l.value
57+
for i, x in enumerate(sage_list):
58+
if not isinstance(x, GapElement):
59+
elem = <GapElement>libgap(x)
60+
else:
61+
elem = <GapElement>x
62+
63+
GAP_AssList(l, i + 1, elem.value)
64+
return l
65+
finally:
66+
GAP_Leave()
6067

6168

6269
cdef Obj make_gap_matrix(sage_list, gap_ring) except NULL:
@@ -77,22 +84,30 @@ cdef Obj make_gap_matrix(sage_list, gap_ring) except NULL:
7784
7885
The list of the elements in ``sage_list`` as a Gap ``Obj``.
7986
"""
80-
cdef GapElement l = libgap.eval('[]')
87+
cdef Obj l
8188
cdef GapElement elem
8289
cdef GapElement one
90+
cdef int i
8391
if gap_ring is not None:
8492
one = <GapElement>gap_ring.One()
8593
else:
8694
one = <GapElement>libgap(1)
87-
for x in sage_list:
88-
if not isinstance(x, GapElement):
89-
elem = <GapElement>libgap(x)
90-
elem = elem * one
91-
else:
92-
elem = <GapElement>x
9395

94-
AddList(l.value, elem.value)
95-
return l.value
96+
try:
97+
GAP_Enter()
98+
l = GAP_NewPlist(0)
99+
100+
for i, x in enumerate(sage_list):
101+
if not isinstance(x, GapElement):
102+
elem = <GapElement>libgap(x)
103+
elem = elem * one
104+
else:
105+
elem = <GapElement>x
106+
107+
GAP_AssList(l, i + 1, elem.value)
108+
return l
109+
finally:
110+
GAP_Leave()
96111

97112

98113
cdef char *capture_stdout(Obj func, Obj obj):

src/sage/libs/gap/gap_includes.pxd

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,6 @@ cdef extern from "gap/lists.h" nogil:
9696
Obj ELM_LIST(Obj lst, int pos)
9797

9898

99-
cdef extern from "gap/listfunc.h" nogil:
100-
void AddList(Obj list, Obj obj)
101-
102-
10399
cdef extern from "gap/objects.h" nogil:
104100
bint IS_MUTABLE_OBJ(Obj obj)
105101
Obj SHALLOW_COPY_OBJ(Obj obj)

0 commit comments

Comments
 (0)