On Sage 8.6 with Python 2, the following command produces the expected result (namely, a sage.interfaces.gap.GapElement):
sage: gap('0') 0 whereas in Sage 8.6 with Python 3 I get the following error: sage: gap('0') --------------------------------------------------------------------------- FileNotFoundError Traceback (most recent call last) /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _start(self) 1239 # been upgraded. -> 1240 if os.path.getmtime(WORKSPACE) < timestamp(): 1241 raise OSError("GAP workspace too old") /sage/local/lib/python3.6/genericpath.py in getmtime(filename) 54 """Return the last modification time of a file, reported by os.stat().""" ---> 55 return os.stat(filename).st_mtime 56 FileNotFoundError: [Errno 2] No such file or directory: '/home/sage/.sage/gap/gap-workspace-0x752c50fd99b2032f' During handling of the above exception, another exception occurred: UnicodeDecodeError Traceback (most recent call last) /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in __init__(self, parent, value, is_name, name) 1436 try: -> 1437 self._name = parent._create(value, name=name) 1438 # Convert ValueError and RuntimeError to TypeError for /sage/local/lib/python3.6/site-packages/sage/interfaces/interface.py in _create(self, value, name) 483 name = self._next_var_name() if name is None else name --> 484 self.set(name, value) 485 return name /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in set(self, var, value) 1413 cmd = ('%s:=%s;;' % (var, value)).replace('\n','') -> 1414 self._eval_line(cmd, allow_use_file=True) 1415 /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _eval_line(self, line, allow_use_file, wait_for_prompt, restart_if_needed) 742 if self._expect is None: --> 743 self._start() 744 E = self._expect /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _start(self) 1246 except OSError: -> 1247 gap_reset_workspace(verbose=False) 1248 /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in gap_reset_workspace(max_workspace_size, verbose) 1578 g = Gap(use_workspace_cache=False, max_workspace_size=None) -> 1579 g.eval('SetUserPreference("HistoryMaxLines", 30)') 1580 from sage.tests.gap_packages import all_installed_packages /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in eval(self, x, newlines, strip, split_lines, **kwds) 582 input_line += ';' --> 583 result = Expect.eval(self, input_line, **kwds) 584 if not newlines: /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in eval(self, code, strip, synchronize, locals, allow_use_file, split_lines, **kwds) 1350 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) -> 1351 for L in code.split('\n') if L != '']) 1352 else: /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in <listcomp>(.0) 1350 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) -> 1351 for L in code.split('\n') if L != '']) 1352 else: /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _eval_line(self, line, allow_use_file, wait_for_prompt, restart_if_needed) 742 if self._expect is None: --> 743 self._start() 744 E = self._expect /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _start(self) 1273 # set random seed -> 1274 self.set_seed(self._seed) 1275 /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in set_seed(self, seed) 1178 seed = self.rand_seed() -> 1179 self.eval("Reset(GlobalMersenneTwister,%d)" % seed) 1180 self.eval("Reset(GlobalRandomSource,%d)" % seed) /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in eval(self, x, newlines, strip, split_lines, **kwds) 582 input_line += ';' --> 583 result = Expect.eval(self, input_line, **kwds) 584 if not newlines: /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in eval(self, code, strip, synchronize, locals, allow_use_file, split_lines, **kwds) 1350 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) -> 1351 for L in code.split('\n') if L != '']) 1352 else: /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in <listcomp>(.0) 1350 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) -> 1351 for L in code.split('\n') if L != '']) 1352 else: /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _eval_line(self, line, allow_use_file, wait_for_prompt, restart_if_needed) 754 # them (on Python 3), currently just using the default encoding --> 755 normal, error = bytes_to_str(normal), bytes_to_str(error) 756 /sage/local/lib/python3.6/site-packages/sage/cpython/string.pxd in sage.cpython.string.bytes_to_str (build/cythonized/sage/cpython/string.c:1509)() 30 ---> 31 cpdef inline str bytes_to_str(b, encoding=None, errors=None): 32 r""" /sage/local/lib/python3.6/site-packages/sage/cpython/string.pxd in sage.cpython.string.bytes_to_str (build/cythonized/sage/cpython/string.c:1393)() 59 else: ---> 60 return _cstr_to_str(<bytes>b, encoding, errors) 61 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 15: invalid start byte During handling of the above exception, another exception occurred: TypeError Traceback (most recent call last) <ipython-input-1-051215b8675e> in <module>() ----> 1 gap('0') /sage/local/lib/python3.6/site-packages/sage/interfaces/interface.py in __call__(self, x, name) 286 287 if isinstance(x, string_types): --> 288 return cls(self, x, name=name) 289 try: 290 return self._coerce_from_special_method(x) /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in __init__(self, parent, value, is_name, name) 1440 except (RuntimeError, ValueError) as x: 1441 self._session_number = -1 -> 1442 raise_(TypeError, TypeError(*x.args), sys.exc_info()[2]) 1443 except BaseException: 1444 self._session_number = -1 /sage/local/lib/python3.6/site-packages/six.py in reraise(tp, value, tb) 690 value = tp() 691 if value.__traceback__ is not tb: --> 692 raise value.with_traceback(tb) 693 raise value 694 finally: /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in __init__(self, parent, value, is_name, name) 1435 else: 1436 try: -> 1437 self._name = parent._create(value, name=name) 1438 # Convert ValueError and RuntimeError to TypeError for 1439 # coercion to work properly. /sage/local/lib/python3.6/site-packages/sage/interfaces/interface.py in _create(self, value, name) 482 def _create(self, value, name=None): 483 name = self._next_var_name() if name is None else name --> 484 self.set(name, value) 485 return name 486 /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in set(self, var, value) 1412 """ 1413 cmd = ('%s:=%s;;' % (var, value)).replace('\n','') -> 1414 self._eval_line(cmd, allow_use_file=True) 1415 1416 def get(self, var, use_file=False): /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _eval_line(self, line, allow_use_file, wait_for_prompt, restart_if_needed) 741 try: 742 if self._expect is None: --> 743 self._start() 744 E = self._expect 745 #import pdb; pdb.set_trace() /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _start(self) 1245 os.utime(WORKSPACE, None) 1246 except OSError: -> 1247 gap_reset_workspace(verbose=False) 1248 1249 global first_try /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in gap_reset_workspace(max_workspace_size, verbose) 1577 # Create new workspace with filename WORKSPACE 1578 g = Gap(use_workspace_cache=False, max_workspace_size=None) -> 1579 g.eval('SetUserPreference("HistoryMaxLines", 30)') 1580 from sage.tests.gap_packages import all_installed_packages 1581 for pkg in all_installed_packages(): /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in eval(self, x, newlines, strip, split_lines, **kwds) 581 if not input_line.endswith(';'): 582 input_line += ';' --> 583 result = Expect.eval(self, input_line, **kwds) 584 if not newlines: 585 result = result.replace("\\\n","") /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in eval(self, code, strip, synchronize, locals, allow_use_file, split_lines, **kwds) 1349 elif split_lines: 1350 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) -> 1351 for L in code.split('\n') if L != '']) 1352 else: 1353 return self._eval_line(code, allow_use_file=allow_use_file, **kwds) /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in <listcomp>(.0) 1349 elif split_lines: 1350 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) -> 1351 for L in code.split('\n') if L != '']) 1352 else: 1353 return self._eval_line(code, allow_use_file=allow_use_file, **kwds) /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _eval_line(self, line, allow_use_file, wait_for_prompt, restart_if_needed) 741 try: 742 if self._expect is None: --> 743 self._start() 744 E = self._expect 745 #import pdb; pdb.set_trace() /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _start(self) 1272 1273 # set random seed -> 1274 self.set_seed(self._seed) 1275 1276 def _function_class(self): /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in set_seed(self, seed) 1177 if seed is None: 1178 seed = self.rand_seed() -> 1179 self.eval("Reset(GlobalMersenneTwister,%d)" % seed) 1180 self.eval("Reset(GlobalRandomSource,%d)" % seed) 1181 self._seed = seed /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in eval(self, x, newlines, strip, split_lines, **kwds) 581 if not input_line.endswith(';'): 582 input_line += ';' --> 583 result = Expect.eval(self, input_line, **kwds) 584 if not newlines: 585 result = result.replace("\\\n","") /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in eval(self, code, strip, synchronize, locals, allow_use_file, split_lines, **kwds) 1349 elif split_lines: 1350 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) -> 1351 for L in code.split('\n') if L != '']) 1352 else: 1353 return self._eval_line(code, allow_use_file=allow_use_file, **kwds) /sage/local/lib/python3.6/site-packages/sage/interfaces/expect.py in <listcomp>(.0) 1349 elif split_lines: 1350 return '\n'.join([self._eval_line(L, allow_use_file=allow_use_file, **kwds) -> 1351 for L in code.split('\n') if L != '']) 1352 else: 1353 return self._eval_line(code, allow_use_file=allow_use_file, **kwds) /sage/local/lib/python3.6/site-packages/sage/interfaces/gap.py in _eval_line(self, line, allow_use_file, wait_for_prompt, restart_if_needed) 753 # garbage should be filtered out by this point); here we decode 754 # them (on Python 3), currently just using the default encoding --> 755 normal, error = bytes_to_str(normal), bytes_to_str(error) 756 757 if len(error): /sage/local/lib/python3.6/site-packages/sage/cpython/string.pxd in sage.cpython.string.bytes_to_str (build/cythonized/sage/cpython/string.c:1509)() 29 30 ---> 31 cpdef inline str bytes_to_str(b, encoding=None, errors=None): 32 r""" 33 Convert ``bytes`` to ``str``. /sage/local/lib/python3.6/site-packages/sage/cpython/string.pxd in sage.cpython.string.bytes_to_str (build/cythonized/sage/cpython/string.c:1393)() 58 return <str>b 59 else: ---> 60 return _cstr_to_str(<bytes>b, encoding, errors) 61 62 TypeError: ('utf-8', b'[ <...snipped...>\ngap> ', 15, 16, 'invalid start byte') Possibly this is related to (or a subset of) https://trac.sagemath.org/ticket/26992 though the command "libgap('0')" has no problems. Is the plan to make "gap" and alias of (or a wrapper for) "libgap" in future releases? Thanks, Nathan -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at https://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.