gap.console() calling problem.

52 views
Skip to first unread message

Hongyi Zhao

unread,
Apr 4, 2023, 8:02:06 PM4/4/23
to sage-support
See my following testing:

Method 1: This works:

sage: import sage.interfaces.gap
sage: sage.interfaces.gap.gap_cmd = "~/.local/bin/gap"
sage: gap.console()

Method 2: This fails:

sage: import sage.interfaces.gap as gap
sage: gap.gap_cmd="~/.local/bin/gap"
sage: gap.console()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In [7], line 1
----> 1 gap.console()

AttributeError: module 'sage.interfaces.gap' has no attribute 'console'


So, how can I switch to gap console more concisely using the python assigning syntax to simplify the code snippet?

Regards,
Zhao

Dima Pasechnik

unread,
Apr 5, 2023, 3:55:47 AM4/5/23
to sage-support


On Wed, 5 Apr 2023, 01:02 Hongyi Zhao, <hongy...@gmail.com> wrote:
See my following testing:

Method 1: This works:

sage: import sage.interfaces.gap
sage: sage.interfaces.gap.gap_cmd = "~/.local/bin/gap"
sage: gap.console()

Method 2: This fails:

sage: import sage.interfaces.gap as gap

this command essentially destroys pexpect GAP
interface, as gap is a "reserved" word (except  
that Python does not have this concept)
but you redefine it.



sage: gap.gap_cmd="~/.local/bin/gap"
sage: gap.console()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In [7], line 1
----> 1 gap.console()

AttributeError: module 'sage.interfaces.gap' has no attribute 'console'


So, how can I switch to gap console more concisely using the python assigning syntax to simplify the code snippet?

Regards,
Zhao

--
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...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sage-support/2e826aab-d887-437b-abe0-bbb59a1123e2n%40googlegroups.com.

Hongyi Zhao

unread,
Apr 5, 2023, 4:03:52 AM4/5/23
to sage-support
On Wednesday, April 5, 2023 at 3:55:47 PM UTC+8 Dima Pasechnik wrote:


On Wed, 5 Apr 2023, 01:02 Hongyi Zhao, <hongy...@gmail.com> wrote:
See my following testing:

Method 1: This works:

sage: import sage.interfaces.gap
sage: sage.interfaces.gap.gap_cmd = "~/.local/bin/gap"
sage: gap.console()

Method 2: This fails:

sage: import sage.interfaces.gap as gap

this command essentially destroys pexpect GAP
interface, as gap is a "reserved" word (except  
that Python does not have this concept)
but you redefine it.

But other alternatives didn't work either:

sage: import sage.interfaces.gap as ggap
sage: ggap.gap_cmd="~/.local/bin/gap"
sage: ggap.console()

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In [3], line 1
----> 1 ggap.console()


AttributeError: module 'sage.interfaces.gap' has no attribute 'console'

Jan Groenewald

unread,
Apr 5, 2023, 5:15:05 AM4/5/23
to sage-s...@googlegroups.com
Hi


On Wed, 5 Apr 2023 at 10:03, Hongyi Zhao <hongy...@gmail.com> wrote:
But other alternatives didn't work either:

sage: import sage.interfaces.gap as ggap
sage: ggap.gap_cmd="~/.local/bin/gap"
sage: ggap.console()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
Cell In [3], line 1
----> 1 ggap.console()

AttributeError: module 'sage.interfaces.gap' has no attribute 'console'

Try gap_console instead of console?

0 jan@dinna-latitude:~$sage
┌────────────────────────────────────────────────────────────────────┐
│ SageMath version 9.2, Release Date: 2020-10-24                     │
│ Using Python 3.9.2. Type "help()" for help.                        │
└────────────────────────────────────────────────────────────────────┘

sage: import sage.interfaces.gap as ggap
sage: ggap.console()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-c7b46a1a6ef6> in <module>

----> 1 ggap.console()

AttributeError: module 'sage.interfaces.gap' has no attribute 'console'
sage: ggap.gap_console()
 ┌───────┐   GAP 4.11.0 of 29-Feb-2020
 │  GAP  │   https://www.gap-system.org
 └───────┘   Architecture: x86_64-pc-linux-gnu-default64-kv7
 Configuration:  gmp 6.2.1, GASMAN, readline
 Loading the library and packages ...
 Packages:   Alnuth 3.1.2, AtlasRep 2.1.0, AutPGrp 1.10.2, CTblLib 1.3.1,
             FactInt 1.6.3, GAPDoc 1.6.3, IO 4.7.0, Polycyclic 2.15.1,
             PrimGrp 3.4.0, SmallGrp 1.4.1, TomLib 1.2.9, TransGrp 2.0.6
 Try '??help' for help. See also '?copyright', '?cite' and '?authors'
gap>

 
Regards,
Jan

Hongyi Zhao

unread,
Apr 5, 2023, 5:45:13 AM4/5/23
to sage-support
Yep. This way, even the following still works, which is inconsistent with the comments given by Dima previously in this discussion:

sage: import sage.interfaces.gap as gap
sage: gap.gap_cmd="~/.local/bin/gap"
sage: gap.gap_console()
....:
 ┌───────┐   GAP 4.13dev-346-g577dcec built on 2023-03-15 07:28:54+0800
 │  GAP  │   https://www.gap-system.org
 └───────┘   Architecture: x86_64-pc-linux-gnu-default64-kv8

 Configuration:  gmp 6.2.1, GASMAN, readline
 Loading the library and packages ...
 Packages:   AClib 1.3.2, Alnuth 3.2.1, AtlasRep 2.1.6, AutPGrp 1.11, Browse 1.8.18, CaratInterface 2.3.4,
             CRISP 1.4.5, Cryst 4.1.25, CrystCat 1.1.10, CrystKit 0.1, CTblLib 1.3.4, curlInterface 2.3.1,
             FactInt 1.6.3, FGA 1.4.0, Forms 1.2.9, GAPDoc 1.6.6, genss 1.6.8, IO 4.8.0, IRREDSOL 1.4.4,
             LAGUNA 3.9.5, orb 4.9.0, Polenta 1.3.10, Polycyclic 2.16, PrimGrp 3.4.2, RadiRoot 2.9,
             recog 1.4.2, ResClasses 4.7.3, SmallGrp 1.5.1, Sophus 1.27, SpinSym 1.5.2, TomLib 1.2.9,
             TransGrp 3.6.3, utils 0.81

 Try '??help' for help. See also '?copyright', '?cite' and '?authors'
gap>

 
Regards,
Jan

Hongyi Zhao

unread,
Apr 5, 2023, 5:49:20 AM4/5/23
to sage-support
Dima is correct, as checked below:
 
sage: n = gap(20062006); n
20062006

sage: import sage.interfaces.gap as gap
sage: n = gap(20062006); n
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

Cell In [3], line 1
----> 1 n = gap(Integer(20062006)); n

TypeError: 'module' object is not callable

Hongyi Zhao

unread,
Apr 5, 2023, 6:07:40 AM4/5/23
to sage-support
Then, I try to do some further testing as follows, but failed:

sage: SmallGroup = libgap.SmallGroup
sage: g1 = SmallGroup(8,1)
sage: g2 = gap.SmallGroup(8,1)
....:
sage: g1==g2
---------------------------------------------------------------------------
GAPError                                  Traceback (most recent call last)
Cell In [18], line 1
----> 1 g1==g2

File ~/Public/repo/github.com/sagemath/sage.git/src/sage/structure/element.pyx:1111, in sage.structure.element.Element.__richcmp__()
   1109         return (<Element>self)._richcmp_(other, op)
   1110     else:
-> 1111         return coercion_model.richcmp(self, other, op)
   1112
   1113 cpdef _richcmp_(left, right, int op):

File ~/Public/repo/github.com/sagemath/sage.git/src/sage/structure/coerce.pyx:1973, in sage.structure.coerce.CoercionModel.richcmp()
   1971 # Coerce to a common parent
   1972 try:
-> 1973     x, y = self.canonical_coercion(x, y)
   1974 except (TypeError, NotImplementedError):
   1975     pass

File ~/Public/repo/github.com/sagemath/sage.git/src/sage/structure/coerce.pyx:1315, in sage.structure.coerce.CoercionModel.canonical_coercion()
   1313     x_elt = x
   1314 if y_map is not None:
-> 1315     y_elt = (<Map>y_map)._call_(y)
   1316 else:
   1317     y_elt = y

File ~/Public/repo/github.com/sagemath/sage.git/src/sage/structure/coerce_maps.pyx:161, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_()
    159             print(type(C), C)
    160             print(type(C._element_constructor), C._element_constructor)
--> 161         raise
    162
    163 cpdef Element _call_with_args(self, x, args=(), kwds={}):

File ~/Public/repo/github.com/sagemath/sage.git/src/sage/structure/coerce_maps.pyx:156, in sage.structure.coerce_maps.DefaultConvertMap_unique._call_()
    154 cdef Parent C = self._codomain
    155 try:
--> 156     return C._element_constructor(x)
    157 except Exception:
    158     if print_warnings:

File ~/Public/repo/github.com/sagemath/sage.git/src/sage/libs/gap/libgap.pyx:318, in sage.libs.gap.libgap.Gap._element_constructor_()
    316 else:
    317     try:
--> 318         return x._libgap_()
    319     except AttributeError:
    320         pass

File ~/Public/repo/github.com/sagemath/sage.git/src/sage/structure/sage_object.pyx:731, in sage.structure.sage_object.SageObject._libgap_()
    729 def _libgap_(self):
    730     from sage.libs.gap.libgap import libgap
--> 731     return libgap.eval(self._libgap_init_())
    732
    733 def _libgap_init_(self):

File ~/Public/repo/github.com/sagemath/sage.git/src/sage/libs/gap/libgap.pyx:404, in sage.libs.gap.libgap.Gap.eval()
    402
    403         initialize()
--> 404         elem = make_any_gap_element(self, gap_eval(gap_command))
    405
    406         # If the element is NULL just return None instead

File ~/Public/repo/github.com/sagemath/sage.git/src/sage/libs/gap/util.pyx:367, in sage.libs.gap.util.gap_eval()
    365 try:
    366     GAP_Enter()
--> 367     result = GAP_EvalString(cmd)
    368     # We can assume that the result object is a GAP PList (plain list)
    369     # and we should use functions for PLists directly for now; see

GAPError: Error, Variable: 'f1' must have a value


OTOH, it seems that either of the following method works:

libgap.SmallGroup(8,1)
gap.SmallGroup(8,1)

So, which is the more recommended usage?

Best,
Zhao

Dima Pasechnik

unread,
Apr 5, 2023, 7:46:54 AM4/5/23
to sage-support
libgap.* and gap.* are different interfaces.

We are in transition away from gap.* interface, please don't use it in new code.

And don't mix them up in your code.




--
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...@googlegroups.com.

Hongyi Zhao

unread,
Apr 5, 2023, 7:56:06 AM4/5/23
to sage-support
On Wednesday, April 5, 2023 at 7:46:54 PM UTC+8 Dima Pasechnik wrote:
libgap.* and gap.* are different interfaces.

We are in transition away from gap.* interface, please don't use it in new code.

And don't mix them up in your code.

Thank you for pointing this out.
 
Best,
Zhao
Reply all
Reply to author
Forward
0 new messages