Opened 10 months ago
Last modified 3 months ago
#31404 needs_review enhancement
Replace most of sage.libs.gap with gappy
Reported by:  embray  Owned by:  

Priority:  major  Milestone:  sage9.5 
Component:  interfaces  Keywords:  gap libgap gappy 
Cc:  vdelecroix, dimpase, mkoeppe  Merged in:  
Authors:  Erik Bray  Reviewers:  Dima Pasechnik, ... 
Report Upstream:  Reported upstream. No feedback yet.  Work issues:  release gappy 0.1.0 final and update spkg version before merging, test against p_groups_cohomology 
Branch:  u/dimpase/gappywithoutwrappers (Commits, GitHub, GitLab)  Commit:  3f1d051757a0e9fa35b6bb04c0a93d606e080d13 
Dependencies:  Stopgaps: 
Description (last modified by )
This is a followup to #31297, particularly inspired by ticket:31297#comment:17. It is a more disruptive change, in that instead of providing wrappers around gappy that are Sage Parents and Elements, it follows the example of cypari2 and just uses gappy moreorless directly without any wrappers.
It remains completely agnostic to the coercion system, though I am not completely happy with this state of affairs. In particular you can see I had to add a special case to Polynomial.__call__
for handling evaluating polynomials on GapObj
s, a case that used to work fine, but now needs a special case since other Sage types cannot be coerced to GapObj
s.
Also had to add special cases for instantiating Integers and Rationals from GapObjs?, but on the plus side this is now a bit faster.
Change History (53)
comment:1 Changed 10 months ago by
 Branch set to u/embray/gappywithoutwrappers
 Commit set to 943b009d917673aa833c3ec67922cbedfbc3fe33
 Status changed from new to needs_review
comment:2 Changed 10 months ago by
 Description modified (diff)
If eventually approved, this would supersede #31297.
comment:3 Changed 9 months ago by
Does sphinx link such as :mod:`gappy.gapobj`
actually works? The question is merely
 where is it resolved?
 in the documentation where does it point to: local or distant documentation?
For pplpy
we had to trick a bit, (commit 684e10
)

build/pkgs/pplpy/spkginstall
diff git a/build/pkgs/pplpy/spkginstall b/build/pkgs/pplpy/spkginstall index deba1bb42b..5a39f43925 100644
a b 1 1 cd src && sdh_pip_install . 2 3 if [[ "$SAGE_SPKG_INSTALL_DOCS" != no ]] ; then 4 # Compile pplpy's documentation 5 sagepython23 setup.py build_ext inplace 6 PYTHONPATH=$PYTHONPATH:$(pwd) 7 cd docs 8 $MAKE html 9 10 # install pplpy's documentation 11 PPLPY_DOCS=$SAGE_SHARE/doc/pplpy 12 mkdir p $PPLPY_DOCS 13 cp r build/html/* $PPLPY_DOCS 14 fi 
src/doc/common/conf.py
diff git a/src/doc/common/conf.py b/src/doc/common/conf.py index 91f651a41c..70dd17f271 100644
a b python_version = sys.version_info.major 177 177 intersphinx_mapping = { 178 178 'python': ('https://docs.python.org/', 179 179 os.path.join(SAGE_DOC_SRC, "common", 180 "python{}.inv".format(python_version)))} 180 "python{}.inv".format(python_version))), 181 'pplpy': (os.path.join(SAGE_SHARE, "doc", "pplpy"), None)} 181 182 182 183 def set_intersphinx_mappings(app): 183 184 """
What we did is not robust at all...
comment:4 followup: ↓ 6 Changed 9 months ago by
I think the Python package pplpy
should advertise the install location of the docs if possible. Assuming that things live in SAGE_SHARE
is not a good idea...
See also: #27495  Use sphinx.ext.extlinks to add Sphinx roles for links to external package docs
comment:5 Changed 9 months ago by
I am still working on updating the docs.
comment:6 in reply to: ↑ 4 Changed 9 months ago by
Replying to mkoeppe:
SNIP
I opened a thread on sagedevel, no need to clutter the ticket with general documentation issue.
comment:7 Changed 9 months ago by
Another tricky aspect of the doc build: When I try to add a spkgpostinst to install the docs for gappy, gappy's own conf.py has an intersphinx mapping for the Python docs.
Even weirder, when it tries to download the objects.inv from python.org it just hangs. If I manually cd to the build directory for gappy and run cd src/docs; make html
the download works no problem. But when running ./sage i gappy
it hangs at:
[gappy0.1.0a3] loading intersphinx inventory from https://docs.python.org/3/objects.inv...
Are we actually doing something to block the internet connection when installing packages?
comment:8 Changed 9 months ago by
It eventually fails with
[gappy0.1.0a3] WARNING: failed to reach any of the inventories with the following issues: [gappy0.1.0a3] intersphinx inventory 'https://docs.python.org/3/objects.inv' not fetchable due to <class 'requests.exceptions.ProxyError'>: HTTPSConnectionPool(host='docs.python.org', port=443): Max retries exceeded with url: /3/objects.inv (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7f8dcb536518>: Failed to establish a new connection: [Errno 110] Connection timed out',)))
comment:9 Changed 9 months ago by
A simple workaround suggested here is to write a wrapper around the original conf.py
to override the intersphinx_mapping
setting. I'm trying to get that to work now.
comment:10 Changed 9 months ago by
 Commit changed from 943b009d917673aa833c3ec67922cbedfbc3fe33 to 092fa4b8111575c45e9b634e482558fd150ec9ea
comment:11 Changed 9 months ago by
Yep, this approach gets the job done.
In case we also have a local copy of the Python docs installed, this can also change the intersphinx mapping to generate links to the local docs instead of the online ones, if desired. Same approach could be used in other packages (pplpy, etc.)
Next step: add the intersphinx mapping to the Sage docs, again generating links to the local gappy docs if available, and otherwise to the online docs.
comment:12 Changed 9 months ago by
 Commit changed from 092fa4b8111575c45e9b634e482558fd150ec9ea to a87cfbef3b1f287d730c42138680fe59cbffd301
Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:
86e4b1b  Deprecate sage.libs.gap.element and convert Sage to use

2be416a  Since this code was moved into a function it should use globals() not

45eeb8f  Install the gappy docs if SAGE_SPKG_INSTALL_DOCS=yes

a87cfbe  Various documentation improvements:

comment:13 Changed 9 months ago by
This is nearly ready to go from my point of view, except that when I run the full test suite I get a weird segfault from the Singular interface around here:
sage: a = singular(1) ## line 502 ## sage: _ = singular._expect.sendline('1+') # unfinished input ## line 503 ## sage: try: alarm(0.5) singular._expect_expr('>') # interrupt this except KeyboardInterrupt: pass ## line 504 ## ControlC pressed. Interrupting Singular. Please wait a few seconds... sage: 2*a ## line 513 ##
which seems to be emanating from sage.rings.integer
/home/embray/src/sagemath/sage/local/lib/python3.6/sitepackages/cysignals/signals.cpython36mx86_64linuxgnu.so(+0x6a6b)[0x7fc69ffd9a6b] /home/embray/src/sagemath/sage/local/lib/python3.6/sitepackages/cysignals/signals.cpython36mx86_64linuxgnu.so(+0x6c48)[0x7fc69ffd9c48] /home/embray/src/sagemath/sage/local/lib/python3.6/sitepackages/cysignals/signals.cpython36mx86_64linuxgnu.so(+0x9103)[0x7fc69ffdc103] /lib/x86_64linuxgnu/libc.so.6(+0x3efd0)[0x7fc6a6542fd0] /home/embray/src/sagemath/sage/local/lib/python3.6/sitepackages/cysignals/signals.cpython36mx86_64linuxgnu.so(+0x9deb)[0x7fc69ffdcdeb] /home/embray/src/sagemath/sage/local/lib/python3.6/sitepackages/sage/rings/integer.cpython36mx86_64linuxgnu.so(+0x16ab6)[0x7fc68bbd0ab6] ...
I'm not sure what this would possibly have to do with the libgap interface, but it's not outside the realm of possibility.
When I rerun the failing test by itself the segfault does not occur :/
comment:14 followup: ↓ 15 Changed 9 months ago by
 Cc dimpase added
Should #31297 be listed as a dependency?
comment:15 in reply to: ↑ 14 Changed 9 months ago by
comment:16 Changed 9 months ago by
Thanks for the clarification. I have set the milestone of #31297 accordingly.
comment:17 followup: ↓ 18 Changed 9 months ago by
I fought to make initialization of PermutationGroupElement
much faster. The following bit reverts it completely when initializing from libgap permutations (using .ListPerm()
go through the slow Python iteration protocol).
@@ 581,31 +576,11 @@ cdef class PermutationGroupElement(MultiplicativeGroupElement): ... ValueError: invalid data to initialize a permutation """  cdef UInt2* p2  cdef UInt4* p4  cdef int i  cdef UInt d   if TNUM_OBJ(p.value) == T_PERM2:  d = DEG_PERM2(p.value)  if d > self.n:  d = self.n  else:  for i in range(d, self.n):  self.perm[i] = i  p2 = CONST_ADDR_PERM2(p.value)  for i in range(d):  self.perm[i] = p2[i]  elif TNUM_OBJ(p.value) == T_PERM4:  d = DEG_PERM4(p.value)  if d > self.n:  d = self.n  else:  for i in range(d, self.n):  self.perm[i] = i  p4 = CONST_ADDR_PERM4(p.value)  for i in range(d):  self.perm[i] = p4[i] + if isinstance(p, GapPermutation): + try: + self._set_list_images(p.ListPerm(), False) + except AssertionError: + raise ValueError("invalid data to initialize a permutation") else: raise TypeError("not a gap permutation")
Is there any reason why not use the C API of GAP here?
comment:18 in reply to: ↑ 17 Changed 9 months ago by
Replying to vdelecroix:
Is there any reason why not use the C API of GAP here?
Yes, the goal is to do away as much as possible with using undocumented/potentially unstable GAP internals. The GAP community has shown an interest of late of developing something more of a "public" API for using GAP as a library, and I and others from the Sage side have been working with them a lot to develop that.
Unfortunately, one of the "gaps" is public APIs for accessing permutation objects efficiently.
I'm glad you brought this up though because I was worried about exactly this change, and was not 100% sure how impactful it was. Is there an example case you can give me that might show whether or not there is a performance deficit?
I've made other performance improvements that might negate the change, but you are right that when using ListPerm
it will, in the current code, have to iterate over the GAP List. Perhaps I can add a C method to GapPermutation
to do this more efficiently.
comment:19 Changed 9 months ago by
I'll add, if it makes an enormous difference, I can make an exception for now. It wouldn't be the only exception I've made in the current version of gappy for APIs that are not yet available in the libgap API. I'll propose some additions to libgap for accessing permutations, and then in gappy provide wrappers that provide the currently missing APIs.
comment:20 Changed 9 months ago by
Some more info on the failing Singular test:
#0 0x00007fa76509e6d0 in __GI___waitpid () at /build/glibc2ORdQG/glibc2.27/posix/../sysdeps/unix/sysv/linux/waitpid.c:30 #1 0x00007fa75ea8fad0 in print_enhanced_backtrace () at /tmp/pipreqbuildb0moadh3/build/src/cysignals/implementation.c:563 #2 0x00007fa75ea8fc10 in sigdie () at /tmp/pipreqbuildb0moadh3/build/src/cysignals/implementation.c:589 #3 0x00007fa75ea91f31 in sigdie_for_sig () at /tmp/pipreqbuildb0moadh3/build/src/cysignals/implementation.c:164 #4 0x00007fa75ea91f00 in cysigs_signal_handler () at /tmp/pipreqbuildb0moadh3/build/src/cysignals/implementation.c:262 #5 0x00007fa7653c8170 in __restore_rt () #6 0x00007fa75ea92ac0 in __pyx_f_9cysignals_7signals_verify_exc_value () at /tmp/pipreqbuildb0moadh3/build/src/cysignals/signals.c:3736 #7 0x00007fa74a6989f9 in sig_occurred () at /home/embray/src/sagemath/sage/build/pkgs/sagelib/src/sage/modular/arithgroup/congroup.pyx:0 1 """ 2 Cython helper functions for congruence subgroups 3 4 This file contains optimized Cython implementations of a few functions related #8 0x00007fa74a6989f0 in fast_tp_dealloc () at /home/embray/src/sagemath/sage/build/pkgs/sagelib/src/sage/rings/integer.pyx:7423 7418 cdef mpz_ptr o_mpz = <mpz_ptr>((<Integer>o).value) 7419 7420 # If we are recovering from an interrupt, throw the mpz_t away 7421 # without recycling or freeing it because it might be in an 7422 # inconsistent state (see Trac #24986). > 7423 if sig_occurred() is NULL: 7424 if integer_pool_count < integer_pool_size: 7425 # Here we free any extra memory used by the mpz_t by 7426 # setting it to a single limb. 7427 if o_mpz._mp_alloc > 10:
The test in question is testing an alarm interrupt, so it seems maybe the interrupt is occurring before this sig_occurred()
check in fast_tp_dealloc
, which appears to be trying to do what it's supposed to do (don't recycle an mpz_t
which might be in an inconsistent state). The rest of the stack trace above this isn't useful since it's using the system Python and I don't have the debugging symbols installed.
A couple weird things about this:
 The segfault appears to be happening inside cysignals itself in
verify_exc_value()
.
 This happens consistently, in the same place, when I run the full test suite on this branch, but I can't seem to reproduce it in any other way, and I can't reproduce it on the current develop branch.
comment:21 Changed 9 months ago by
Oh cool, just trying things at random, it seems I can reproduce it reliably with
./sage t fileiterations=2 src/sage/interfaces/singular.py
for some reason.
comment:22 Changed 9 months ago by
I opened https://github.com/sagemath/cysignals/issues/126 to track/discuss the cysignals issue. I wonder if anyone else can reproduce this. What's weird is that it seems to be pretty deterministic as far as when and how it happens, but hard to get it to happen in the first place, and also appears to be a rare corner case.
comment:23 followup: ↓ 24 Changed 9 months ago by
I'm pretty sure that we have seen this failure in the singular interface quite consistently for a while now  thanks for isolating it  I don't think it has anything to do with the present ticket.
comment:24 in reply to: ↑ 23 Changed 9 months ago by
Replying to mkoeppe:
I'm pretty sure that we have seen this failure in the singular interface quite consistently for a while now  thanks for isolating it  I don't think it has anything to do with the present ticket.
Thanks for pointing that out. I'm glad I'm not the only one. Apparently this is tracked already in #30945.
comment:25 Changed 9 months ago by
 Commit changed from a87cfbef3b1f287d730c42138680fe59cbffd301 to 24574e9feae3fedf29fe8a2c903b45db701ce083
Branch pushed to git repo; I updated commit sha1. This was a forced push. Last 10 new commits:
79a8f51  Update gappy to v0.1.0a2 which adds MacOS and Cygwin fixes.

f2f1443  Fixes needed for gappy v0.1.0a2 which did away with the libgap_soname

1e69f14  Further rework of 45b175e43621795f890204a9cdfb30b524f961fa which

9efa4a3  Update gappy to v0.1.3a3 with the requisite changes needed to adapt to

abe29b2  A few minor test fixes:

28ea0fa  Don't assume that anything with a 'parent' attribute is fully

9ac9d9e  Deprecate sage.libs.gap.element and convert Sage to use

9bd39d7  Since this code was moved into a function it should use globals() not

de80b44  Install the gappy docs if SAGE_SPKG_INSTALL_DOCS=yes

24574e9  Various documentation improvements:

comment:26 Changed 9 months ago by
 Commit changed from 24574e9feae3fedf29fe8a2c903b45db701ce083 to 82a5f02ad12087e2b372ddecd0dd539b35bed4fd
Branch pushed to git repo; I updated commit sha1. New commits:
82a5f02  Replace a few more deprecated libgap.function_factory calls.

comment:27 followup: ↓ 28 Changed 9 months ago by
GAP had a new release a week ago:
https://www.gapsystem.org/Releases/4.11.1.html
Does gappy work with it?
comment:28 in reply to: ↑ 27 Changed 9 months ago by
Replying to dimpase:
GAP had a new release a week ago:
https://www.gapsystem.org/Releases/4.11.1.html
Does gappy work with it?
Yes, it does. In fact the new release contains fixes that were motivated by gappy.
One thing I do need to add on the gappy side now is to either:
1) Remove workarounds that were needed prior to this fixes and just make GAP 4.11.1 the minimum GAP version, or
2) Do some version detection to decide what workarounds to include.
I'm going to try for the latter first.
comment:29 Changed 9 months ago by
see #31498 for GAP upgrade
comment:30 Changed 8 months ago by
 Work issues set to release gappy 0.1.0 final and update spkg version before merging
comment:31 Changed 8 months ago by
 Work issues changed from release gappy 0.1.0 final and update spkg version before merging to release gappy 0.1.0 final and update spkg version before merging, test against p_groups_cohomology
comment:33 Changed 6 months ago by
How far along is Sage 9.4 currently? I've been really wanting to get back to finishing up the first release of gappy and getting it into Sage, but my other projects have been slamming me the last several months :(
I hope by this summer I'll have time to do this.
comment:34 Changed 6 months ago by
9.4 has not yet gotten its 1st beta.
comment:35 Changed 4 months ago by
 Milestone changed from sage9.4 to sage9.5
Setting a new milestone for this ticket based on a cursory review.
comment:36 Changed 4 months ago by
 Branch changed from u/embray/gappywithoutwrappers to u/dimpase/gappywithoutwrappers
 Commit changed from 82a5f02ad12087e2b372ddecd0dd539b35bed4fd to c5c84fbb45342c2c24ed1cd9a5e9c36f412d3336
a straighforward rebase over 9.4.beta5 (hopefully correct)
Last 10 new commits:
4debcd5  Fixes needed for gappy v0.1.0a2 which did away with the libgap_soname

d4e76c2  Further rework of 45b175e43621795f890204a9cdfb30b524f961fa which

b544ad4  Update gappy to v0.1.3a3 with the requisite changes needed to adapt to

c02e750  A few minor test fixes:

112d154  Don't assume that anything with a 'parent' attribute is fully

58a5880  Deprecate sage.libs.gap.element and convert Sage to use

b90c248  Since this code was moved into a function it should use globals() not

74dfdf8  Install the gappy docs if SAGE_SPKG_INSTALL_DOCS=yes

f0e99fc  Various documentation improvements:

c5c84fb  Replace a few more deprecated libgap.function_factory calls.

comment:37 Changed 4 months ago by
it builds, but starting errors out:
cd "/home/scratch2/dimpase/sage/sage/src/doc" && sagelogger p "make j8 dochtml" /home/scratch2/dimpase/sage/sage/logs/dochtml.log make[3]: Nothing to be done for 'allsage'. [dochtml] make[4]: warning: jN forced in submake: disabling jobserver mode. [dochtml] Traceback (most recent call last): [dochtml] File "/usr/lib64/python3.8/runpy.py", line 185, in _run_module_as_main [dochtml] mod_name, mod_spec, code = _get_module_details(mod_name, _Error) [dochtml] File "/usr/lib64/python3.8/runpy.py", line 144, in _get_module_details [dochtml] return _get_module_details(pkg_main_name, error) [dochtml] File "/usr/lib64/python3.8/runpy.py", line 111, in _get_module_details [dochtml] __import__(pkg_name) [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage_docbuild/__init__.py", line 57, in <module> [dochtml] import sage.all [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/all.py", line 130, in <module> [dochtml] from sage.misc.all import * # takes a while [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/misc/all.py", line 90, in <module> [dochtml] from .functional import (additive_order, [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/misc/functional.py", line 25, in <module> [dochtml] from sage.rings.complex_double import CDF [dochtml] File "sage/rings/complex_double.pyx", line 101, in init sage.rings.complex_double (build/cythonized/sage/rings/complex_double.c:25297) [dochtml] File "sage/rings/complex_mpfr.pyx", line 200, in sage.rings.complex_mpfr.ComplexField (build/cythonized/sage/rings/complex_mpfr.c:5145) [dochtml] File "sage/rings/complex_mpfr.pyx", line 299, in sage.rings.complex_mpfr.ComplexField_class.__init__ (build/cythonized/sage/rings/complex_mpfr.c:5509) [dochtml] File "sage/rings/complex_mpfr.pyx", line 3365, in sage.rings.complex_mpfr.RRtoCC.__init__ (build/cythonized/sage/rings/complex_mpfr.c:28414) [dochtml] File "sage/categories/map.pyx", line 125, in sage.categories.map.Map.__init__ (build/cythonized/sage/categories/map.c:3579) [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/categories/homset.py", line 395, in Hom [dochtml] H = Hom(X, Y, category, check=False) [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/categories/homset.py", line 422, in Hom [dochtml] H = X._Hom_(Y, category) [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/categories/rings.py", line 422, in _Hom_ [dochtml] from sage.rings.homset import RingHomset [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/rings/homset.py", line 18, in <module> [dochtml] from . import quotient_ring [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/rings/quotient_ring.py", line 113, in <module> [dochtml] import sage.rings.polynomial.multi_polynomial_ideal [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/rings/polynomial/multi_polynomial_ideal.py", line 235, in <module> [dochtml] from sage.interfaces.all import (singular as singular_default, [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/interfaces/all.py", line 10, in <module> [dochtml] from .gap import gap, gap_reset_workspace, set_gap_memory_pool_size, Gap [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/interfaces/gap.py", line 180, in <module> [dochtml] from .gap_workspace import gap_workspace_file, prepare_workspace_dir [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/interfaces/gap_workspace.py", line 19, in <module> [dochtml] from sage.env import DOT_SAGE, GAP_SO [dochtml] ImportError: cannot import name 'GAP_SO' from 'sage.env' (/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/env.py) [dochtml] make j8 docinventory [dochtml] make[5]: warning: jN forced in submake: disabling jobserver mode. [dochtml] cd /home/scratch2/dimpase/sage/sage && ./sage docbuild nopdflinks .o inventory [dochtml] Traceback (most recent call last): [dochtml] File "/usr/lib64/python3.8/runpy.py", line 185, in _run_module_as_main [dochtml] mod_name, mod_spec, code = _get_module_details(mod_name, _Error) [dochtml] File "/usr/lib64/python3.8/runpy.py", line 144, in _get_module_details [dochtml] return _get_module_details(pkg_main_name, error) [dochtml] File "/usr/lib64/python3.8/runpy.py", line 111, in _get_module_details [dochtml] __import__(pkg_name) [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage_docbuild/__init__.py", line 57, in <module> [dochtml] import sage.all [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/all.py", line 130, in <module> [dochtml] from sage.misc.all import * # takes a while [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/misc/all.py", line 90, in <module> [dochtml] from .functional import (additive_order, [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/misc/functional.py", line 25, in <module> [dochtml] from sage.rings.complex_double import CDF [dochtml] File "sage/rings/complex_double.pyx", line 101, in init sage.rings.complex_double (build/cythonized/sage/rings/complex_double.c:25297) [dochtml] File "sage/rings/complex_mpfr.pyx", line 200, in sage.rings.complex_mpfr.ComplexField (build/cythonized/sage/rings/complex_mpfr.c:5145) [dochtml] File "sage/rings/complex_mpfr.pyx", line 299, in sage.rings.complex_mpfr.ComplexField_class.__init__ (build/cythonized/sage/rings/complex_mpfr.c:5509) [dochtml] File "sage/rings/complex_mpfr.pyx", line 3365, in sage.rings.complex_mpfr.RRtoCC.__init__ (build/cythonized/sage/rings/complex_mpfr.c:28414) [dochtml] File "sage/categories/map.pyx", line 125, in sage.categories.map.Map.__init__ (build/cythonized/sage/categories/map.c:3579) [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/categories/homset.py", line 395, in Hom [dochtml] H = Hom(X, Y, category, check=False) [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/categories/homset.py", line 422, in Hom [dochtml] H = X._Hom_(Y, category) [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/categories/rings.py", line 422, in _Hom_ [dochtml] from sage.rings.homset import RingHomset [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/rings/homset.py", line 18, in <module> [dochtml] from . import quotient_ring [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/rings/quotient_ring.py", line 113, in <module> [dochtml] import sage.rings.polynomial.multi_polynomial_ideal [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/rings/polynomial/multi_polynomial_ideal.py", line 235, in <module> [dochtml] from sage.interfaces.all import (singular as singular_default, [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/interfaces/all.py", line 10, in <module> [dochtml] from .gap import gap, gap_reset_workspace, set_gap_memory_pool_size, Gap [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/interfaces/gap.py", line 180, in <module> [dochtml] from .gap_workspace import gap_workspace_file, prepare_workspace_dir [dochtml] File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/interfaces/gap_workspace.py", line 19, in <module> [dochtml] from sage.env import DOT_SAGE, GAP_SO [dochtml] ImportError: cannot import name 'GAP_SO' from 'sage.env' (/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/env.py) [dochtml] make[5]: *** [Makefile:20: docinventory.o] Error 1 [dochtml] make[4]: *** [Makefile:35: docinventoryreference] Error 2 make[3]: *** [Makefile:2359: dochtml] Error 2 make[2]: *** [Makefile:2245: allstart] Error 2 make[2]: Leaving directory '/home/scratch2/dimpase/sage/sage/build/make'
is it something trivial?
comment:38 Changed 4 months ago by
 Reviewers set to Dima Pasechnik
comment:39 Changed 4 months ago by
well:
src/sage/interfaces/gap_workspace.py:from sage.env import DOT_SAGE, GAP_SO
and is not touched by the branch...
comment:40 followup: ↓ 42 Changed 4 months ago by
 Cc mkoeppe added
That use of GAP_SO, which causes the crash, is pretty recent:
$ git show a801e6d85bd commit a801e6d85bd420b60ea75b1671856eb43ac6b18b Author: Matthias Koeppe <mkoeppe@math.ucdavis.edu> Date: Wed Jun 23 14:50:08 2021 0700 src/sage/interfaces/gap_workspace.py: Use hash of GAP_SO to disambiguate the workspace file, not SAGE_LOCAL diff git a/src/sage/interfaces/gap_workspace.py b/src/sage/interfaces/gap_workspace.py index 953dc85116..33a87dd507 100644  a/src/sage/interfaces/gap_workspace.py +++ b/src/sage/interfaces/gap_workspace.py @@ 16,7 +16,7 @@ Support for (lib)GAP workspace files import os import time import hashlib from sage.env import DOT_SAGE, SAGE_LOCAL +from sage.env import DOT_SAGE, GAP_SO def gap_workspace_file(system="gap", name="workspace", dir=None): @@ 59,7 +59,10 @@ def gap_workspace_file(system="gap", name="workspace", dir=None): if dir is None: dir = os.path.join(DOT_SAGE, 'gap')  h = hashlib.sha1(SAGE_LOCAL.encode('utf8')).hexdigest() + if GAP_SO: + h = hashlib.sha1(GAP_SO.encode('utf8')).hexdigest() + else: + h = 'unknown' return os.path.join(dir, '%s%s%s' % (system, name, h))
Reverting it allows Sage to start. Matthias, how should this be properly dealt with?
comment:41 Changed 4 months ago by
Apart from this, GAP workspace management is broken:
********************************************************************** File "src/sage/libs/gap/libgap.pyx", line 24, in sage.libs.gap.libgap Failed example: a = libgap(10) Exception raised: Traceback (most recent call last): File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/doctest/forker.py", line 718, in _run self.compile_and_execute(example, compiler, test.globs) File "/home/scratch2/dimpase/sage/sage/local/lib64/python3.8/sitepackages/sage/doctest/forker.py", line 1137, in compile_and_execute exec(compiled, globs) File "<doctest sage.libs.gap.libgap[0]>", line 1, in <module> a = libgap(Integer(10)) File "sage/misc/lazy_import.pyx", line 362, in sage.misc.lazy_import.LazyImport.__call__ (build/cythonized/sage/misc/lazy_import.c:4036) return self.get_object()(*args, **kwds) File "gappy/core.pyx", line 691, in gappy.core.Gap.__call__ self.initialize() File "sage/libs/gap/libgap.pyx", line 274, in sage.libs.gap.libgap.SageGap.initialize (build/cythonized/sage/libs/gap/libgap.c:2786) initializing = Gap.initialize(self) File "gappy/core.pyx", line 603, in gappy.core.Gap.initialize self._init_kwargs.update(initialize( File "gappy/core.pyx", line 253, in gappy.core.initialize with open(workspace, 'rb'): FileNotFoundError: [Errno 2] No such file or directory: '/home/scratch/dimpase/.sage/gap/libgapworkspacef048f6ddda94b972db915da793e521b0a11cd05f' ...
comment:42 in reply to: ↑ 40 Changed 4 months ago by
Replying to dimpase:
That use of GAP_SO, which causes the crash, is pretty recent:
$ git show a801e6d85bd commit a801e6d85bd420b60ea75b1671856eb43ac6b18b Author: Matthias Koeppe <mkoeppe@math.ucdavis.edu> Date: Wed Jun 23 14:50:08 2021 0700 src/sage/interfaces/gap_workspace.py: Use hash of GAP_SO to disambiguate the workspace file, not SAGE_LOCAL diff git a/src/sage/interfaces/gap_workspace.py b/src/sage/interfaces/gap_workspace.py index 953dc85116..33a87dd507 100644  a/src/sage/interfaces/gap_workspace.py +++ b/src/sage/interfaces/gap_workspace.py @@ 16,7 +16,7 @@ Support for (lib)GAP workspace files import os import time import hashlib from sage.env import DOT_SAGE, SAGE_LOCAL +from sage.env import DOT_SAGE, GAP_SO def gap_workspace_file(system="gap", name="workspace", dir=None): @@ 59,7 +59,10 @@ def gap_workspace_file(system="gap", name="workspace", dir=None): if dir is None: dir = os.path.join(DOT_SAGE, 'gap')  h = hashlib.sha1(SAGE_LOCAL.encode('utf8')).hexdigest() + if GAP_SO: + h = hashlib.sha1(GAP_SO.encode('utf8')).hexdigest() + else: + h = 'unknown' return os.path.join(dir, '%s%s%s' % (system, name, h))Reverting it allows Sage to start. Matthias, how should this be properly dealt with?
I don't have much of an idea about GAP workspaces. Before my change, a unique identifier was obtained keyed to SAGE_LOCAL. I figured this was supposed to somehow capture version dependence. So keying it to GAP_SO
was my solution to remove the use of SAGE_LOCAL. I suppose any kind of version info of gappy
would also do the job.
comment:43 Changed 3 months ago by
 Commit changed from c5c84fbb45342c2c24ed1cd9a5e9c36f412d3336 to 049ec501c8a5fc1d99cd1d9e400823f5ceb2b49b
Branch pushed to git repo; I updated commit sha1. This was a forced push. Last 10 new commits:
260c19f  Fixes needed for gappy v0.1.0a2 which did away with the libgap_soname

78a7b7b  Further rework of 45b175e43621795f890204a9cdfb30b524f961fa which

a2463d8  Update gappy to v0.1.3a3 with the requisite changes needed to adapt to

58560a9  A few minor test fixes:

b7c0a31  Don't assume that anything with a 'parent' attribute is fully

fb86c3c  Deprecate sage.libs.gap.element and convert Sage to use

111760c  Since this code was moved into a function it should use globals() not

343b898  Install the gappy docs if SAGE_SPKG_INSTALL_DOCS=yes

42a115c  Various documentation improvements:

049ec50  Replace a few more deprecated libgap.function_factory calls.

comment:44 Changed 3 months ago by
OK, this branch at least builds and it's possible to start Sage, and build docs. Some doctests in sage.geometry.polyhedron.base
fail, however:
... File "src/sage/geometry/polyhedron/base.py", line 10469, in sage.geometry.polyhedron.base.Polyhedron_base.restricted_automorphism_group Failed example: P.restricted_automorphism_group(output="matrixlist")[0].is_immutable() Exception raised: Traceback (most recent call last): File "sage/misc/cachefunc.pyx", line 1943, in sage.misc.cachefunc.CachedMethodCaller.__call__ (build/cythonized/sage/misc/cachefunc.c:10347) return cache[k] KeyError: (('matrixlist',), ()) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 718, in _run self.compile_and_execute(example, compiler, test.globs) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 1137, in compile_and_execute exec(compiled, globs) File "<doctest sage.geometry.polyhedron.base.Polyhedron_base.restricted_automorphism_group[43]>", line 1, in <module> P.restricted_automorphism_group(output="matrixlist")[Integer(0)].is_immutable() File "sage/misc/cachefunc.pyx", line 1948, in sage.misc.cachefunc.CachedMethodCaller.__call__ (build/cythonized/sage/misc/cachefunc.c:10483) w = self._instance_call(*args, **kwds) File "sage/misc/cachefunc.pyx", line 1824, in sage.misc.cachefunc.CachedMethodCaller._instance_call (build/cythonized/sage/misc/cachefunc.c:9949) return self.f(self._instance, *args, **kwds) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/geometry/polyhedron/base.py", line 10563, in restricted_automorphism_group permgroup = G.automorphism_group(edge_labels=True) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/graphs/generic_graph.py", line 22260, in automorphism_group output.append(PermutationGroup(gens=gens, domain=int_to_vertex.values())) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/groups/perm_gps/permgroup.py", line 352, in PermutationGroup return PermutationGroup_generic(gens=gens, gap_group=gap_group, domain=domain, NameError: name 'gap_group' is not defined ********************************************************************** 4 items had failures: 9 of 15 in sage.geometry.polyhedron.base.Polyhedron_base.combinatorial_automorphism_group 28 of 45 in sage.geometry.polyhedron.base.Polyhedron_base.restricted_automorphism_group 1 of 15 in sage.geometry.polyhedron.base.Polyhedron_base.vertex_facet_graph 1 of 10 in sage.geometry.polyhedron.base.Polyhedron_base.vertex_graph [1755 tests, 39 failures, 121.34 s]
comment:45 Changed 3 months ago by
 Commit changed from 049ec501c8a5fc1d99cd1d9e400823f5ceb2b49b to 6c99fbf4be01a2a47789f22d5d7b57aaf3dff977
Branch pushed to git repo; I updated commit sha1. New commits:
6c99fbf  restore preparing PermutationGroup_generic() args

comment:46 Changed 3 months ago by
 Commit changed from 6c99fbf4be01a2a47789f22d5d7b57aaf3dff977 to 69feb677af2bc947f3de6bb43af7d57cee7f29fa
Branch pushed to git repo; I updated commit sha1. New commits:
69feb67  restore computing GAP_SO

comment:47 Changed 3 months ago by
libgap workspace management is still broken, as can be seen by removing ~/.sage/gap/
and
running e.g. sage: libgap(1)
at Sage prompt.
sage: libgap(1)  FileNotFoundError Traceback (most recent call last) <ipythoninput1037524c8c625> in <module> > 1 libgap(Integer(1)) /home/scratch2/dimpase/sage/sage/local/lib64/python3.9/sitepackages/sage/misc/lazy_import.pyx in sage.misc.lazy_import.LazyImport.__call__ (build/cythonized/sage/misc/lazy_import.c:4052)() 360 True 361 """ > 362 return self.get_object()(*args, **kwds) 363 364 def __repr__(self): /home/scratch2/dimpase/sage/sage/local/lib64/python3.9/sitepackages/gappy/core.pyx in gappy.core.Gap.__call__() 689 690 """ > 691 self.initialize() 692 if isinstance(x, GapObj): 693 return x /home/scratch2/dimpase/sage/sage/local/lib64/python3.9/sitepackages/sage/libs/gap/libgap.pyx in sage.libs.gap.libgap.SageGap.initialize (build/cythonized/sage/libs/gap/libgap.c:2801)() 272 """ 273 > 274 initializing = Gap.initialize(self) 275 276 if initializing: /home/scratch2/dimpase/sage/sage/local/lib64/python3.9/sitepackages/gappy/core.pyx in gappy.core.Gap.initialize() 601 return False 602 > 603 self._init_kwargs.update(initialize( 604 gap_root=self._init_kwargs['gap_root'], 605 gaprc=self._init_kwargs['gaprc'], /home/scratch2/dimpase/sage/sage/local/lib64/python3.9/sitepackages/gappy/core.pyx in gappy.core.initialize() 251 workspace = os.path.normpath(workspace) 252 > 253 with open(workspace, 'rb'): 254 pass 255 FileNotFoundError: [Errno 2] No such file or directory: '/home/scratch/dimpase/.sage/gap/libgapworkspacec357604137f37c963401793ca1ab74cce6c00efd'
comment:48 Changed 3 months ago by
 Report Upstream changed from N/A to Reported upstream. No feedback yet.
I see how the workspace issue can be fixed, but it might need a change in gappy
 I opened https://github.com/embray/gappy/issues/16 to discuss.
comment:49 Changed 3 months ago by
 Commit changed from 69feb677af2bc947f3de6bb43af7d57cee7f29fa to 1b5adee47a11523397f105787e254d49210b9a02
Branch pushed to git repo; I updated commit sha1. New commits:
1b5adee  gappy PR#17 patch; uses it to handle workspaces

comment:50 Changed 3 months ago by
 Reviewers changed from Dima Pasechnik to Dima Pasechnik, ...
 Status changed from needs_work to needs_review
we still need to carefully check that GAP workspace rotation is not broken, but hopefully not.
comment:51 Changed 3 months ago by
a couple of test failures I can't quite make sense of. The 1st one has something to do with
cachefunc
, categories, etc...
File "src/sage/groups/perm_gps/permgroup_morphism.py", line 119, in sage.groups.perm_gps.permgroup_morphism.PermutationGroupMorphism.image Failed example: h = D4.isomorphism_to(G) Exception raised: Traceback (most recent call last): File "sage/misc/cachefunc.pyx", line 1943, in sage.misc.cachefunc.CachedMethodCaller.__call__ (build/cythonized/sage/misc/cachefunc.c:10347) return cache[k] KeyError: ((<SageGap(gap_root='/mnt/opt/Sage/sagedev/local/share/gap')>,), ()) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "sage/structure/category_object.pyx", line 839, in sage.structure.category_object.CategoryObject.getattr_from_category (build/cythonized/sage/structure/category_object.c:7089) return self.__cached_methods[name] KeyError: '_pari_nf' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/rings/number_field/number_field.py", line 4348, in pari_nf return self._pari_nf File "sage/structure/category_object.pyx", line 833, in sage.structure.category_object.CategoryObject.__getattr__ (build/cythonized/sage/structure/category_object.c:7008) return self.getattr_from_category(name) File "sage/structure/category_object.pyx", line 848, in sage.structure.category_object.CategoryObject.getattr_from_category (build/cythonized/sage/structure/category_object.c:7174) attr = getattr_from_other_class(self, cls, name) File "sage/cpython/getattr.pyx", line 367, in sage.cpython.getattr.getattr_from_other_class (build/cythonized/sage/cpython/getattr.c:2566) raise AttributeError(dummy_error_message) AttributeError: 'NumberField_absolute_with_category' object has no attribute '_cache___pari_absolute_structure' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 718, in _run self.compile_and_execute(example, compiler, test.globs) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 1137, in compile_and_execute exec(compiled, globs) File "<doctest sage.groups.perm_gps.permgroup_morphism.PermutationGroupMorphism.image[17]>", line 1, in <module> h = D4.isomorphism_to(G) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/groups/perm_gps/permgroup.py", line 4076, in isomorphism_to iso = self._libgap_().IsomorphismGroups(right) File "gappy/gapobj.pyx", line 2773, in gappy.gapobj.GapMethodProxy.__call__ return self.func.__call__(self.self, *args) File "gappy/gapobj.pyx", line 2489, in gappy.gapobj.GapFunction.__call__ sig_on() SystemError: calling remove_from_pari_stack() inside sig_on()
The 2nd one is even less explicit, with a mysterious
SyntaxWarning: 'tuple' object is not callable; perhaps you missed a comma?
coming from somewhere I don't see
File "src/sage/groups/perm_gps/permgroup.py", line 614, in sage.groups.perm_gps.permgroup.PermutationGroup_generic.gap Failed example: gap(P8) == P8.gap() Expected: True Got: doctest:warning File "/mnt/opt/Sage/sagedev/src/bin/sageruntests", line 144, in <module> err = DC.run() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/control.py", line 1207, in run self.run_doctests() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/control.py", line 909, in run_doctests self.dispatcher.dispatch() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2044, in dispatch self.parallel_dispatch() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 1939, in parallel_dispatch w.start() # This might take some time File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2211, in start super(DocTestWorker, self).start() File "/usr/lib/python3.8/multiprocessing/process.py", line 121, in start self._popen = self._Popen(self) File "/usr/lib/python3.8/multiprocessing/context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "/usr/lib/python3.8/multiprocessing/context.py", line 277, in _Popen return Popen(process_obj) File "/usr/lib/python3.8/multiprocessing/popen_fork.py", line 19, in __init__ self._launch(process_obj) File "/usr/lib/python3.8/multiprocessing/popen_fork.py", line 75, in _launch code = process_obj._bootstrap(parent_sentinel=child_r) File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap self.run() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2183, in run task(self.options, self.outtmpfile, msgpipe, self.result_queue) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2512, in __call__ doctests, extras = self._run(runner, options, results) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2559, in _run result = runner.run(test) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 910, in run return self._run(test, compileflags, out) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 718, in _run self.compile_and_execute(example, compiler, test.globs) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 1137, in compile_and_execute exec(compiled, globs) File "<doctest sage.groups.perm_gps.permgroup.PermutationGroup_generic.gap[2]>", line 1, in <module> gap(P8) == P8.gap() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/interfaces/interface.py", line 1082, in _sage_ return sage.misc.sage_eval.sage_eval(string) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/misc/sage_eval.py", line 201, in sage_eval return eval(source, sage.all.__dict__, locals) File "/usr/lib/python3.8/warnings.py", line 109, in _showwarnmsg sw(msg.message, msg.category, msg.filename, msg.lineno, : SyntaxWarning: 'tuple' object is not callable; perhaps you missed a comma? doctest:warning File "/mnt/opt/Sage/sagedev/src/bin/sageruntests", line 144, in <module> err = DC.run() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/control.py", line 1207, in run self.run_doctests() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/control.py", line 909, in run_doctests self.dispatcher.dispatch() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2044, in dispatch self.parallel_dispatch() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 1939, in parallel_dispatch w.start() # This might take some time File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2211, in start super(DocTestWorker, self).start() File "/usr/lib/python3.8/multiprocessing/process.py", line 121, in start self._popen = self._Popen(self) File "/usr/lib/python3.8/multiprocessing/context.py", line 224, in _Popen return _default_context.get_context().Process._Popen(process_obj) File "/usr/lib/python3.8/multiprocessing/context.py", line 277, in _Popen return Popen(process_obj) File "/usr/lib/python3.8/multiprocessing/popen_fork.py", line 19, in __init__ self._launch(process_obj) File "/usr/lib/python3.8/multiprocessing/popen_fork.py", line 75, in _launch code = process_obj._bootstrap(parent_sentinel=child_r) File "/usr/lib/python3.8/multiprocessing/process.py", line 315, in _bootstrap self.run() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2183, in run task(self.options, self.outtmpfile, msgpipe, self.result_queue) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2512, in __call__ doctests, extras = self._run(runner, options, results) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 2559, in _run result = runner.run(test) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 910, in run return self._run(test, compileflags, out) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 718, in _run self.compile_and_execute(example, compiler, test.globs) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/doctest/forker.py", line 1137, in compile_and_execute exec(compiled, globs) File "<doctest sage.groups.perm_gps.permgroup.PermutationGroup_generic.gap[2]>", line 1, in <module> gap(P8) == P8.gap() File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/interfaces/interface.py", line 1082, in _sage_ return sage.misc.sage_eval.sage_eval(string) File "/mnt/opt/Sage/sagedev/local/lib/python3.8/sitepackages/sage/misc/sage_eval.py", line 201, in sage_eval return eval(source, sage.all.__dict__, locals) File "/usr/lib/python3.8/warnings.py", line 109, in _showwarnmsg sw(msg.message, msg.category, msg.filename, msg.lineno, : SyntaxWarning: 'tuple' object is not callable; perhaps you missed a comma? True
comment:52 Changed 3 months ago by
 Commit changed from 1b5adee47a11523397f105787e254d49210b9a02 to 3f1d051757a0e9fa35b6bb04c0a93d606e080d13
Branch pushed to git repo; I updated commit sha1. New commits:
3f1d051  make invocation of _libgap_() explicit

comment:53 Changed 3 months ago by
I still wouldn't move forward on this too much until I have a first release of gappy out. I haven't had time to work on it in several months, so it's probably fallen a bit behind the last GAP releases (and can probably drop some workarounds for older GAP versions).
Other than that there isn't too much holding up making a gappy releaseI think, as you found, some of the workspace management stuff, and some of the global namespace stuff from Sage's libgap needs to be worked into it better.
Last 10 new commits:
Fix miscellaneous tests that broke due to different group iteration
Update gappy to v0.1.0a1 with some fixes for matrices and gap_function.
Miscellaneous updates to not use deprecated interfaces, particularly
Update gappy to v0.1.0a2 which adds MacOS and Cygwin fixes.
Fixes needed for gappy v0.1.0a2 which did away with the libgap_soname
Further rework of 45b175e43621795f890204a9cdfb30b524f961fa which
Update gappy to v0.1.3a3 with the requisite changes needed to adapt to
A few minor test fixes:
Don't assume that anything with a 'parent' attribute is fully
Deprecate sage.libs.gap.element and convert Sage to use