It works for me too! On Thursday, 15 December 2016 07:40:11 UTC+1, GK wrote: > > Hi again, thanks to the insight. I managed to successfully run sage in > WSL. notebook(automatic_login='False') triggered indeed a different > reaction, but again did not work. The trick was to run bash on ubuntu on > windows as administrator and run sage. Afterwards all seem to work even > without running Bash as administrator. (except that sage does not manage to > open the browser, I do that manually). Also, I have added the line > > 127.0.0.1 localhost YOUR_MACHINE_NAME_HERE > > in /etc/hosts, which may be necessary for the sage server to start. > > On Saturday, December 10, 2016 at 1:51:46 AM UTC+3, Dima Pasechnik wrote: >> >> >> >> On Friday, December 9, 2016 at 10:13:03 PM UTC, Bill Hart wrote: >>> >>> Ah I see. I assumed it would also try to spawn a browser or something. >>> >> >> the default ( notebook()) is indeed to try to open a browser/browser tab >> to show the URL served by the server, whereas >> >> notebook(automatic_login=False) >> >> will just run the server, and let the user to do the rest (connect to the >> URL using a browser). >> >> >> >>> >>> On the other hand, I understand some of the networking stuff is still >>> not completed. You can of course use wget and the like so it can't be too >>> broken. >>> >>> Bill. >>> >>> On Friday, 9 December 2016 15:15:43 UTC+1, Dima Pasechnik wrote: >>>> >>>> >>>> >>>> On Friday, December 9, 2016 at 12:48:30 PM UTC, Bill Hart wrote: >>>>> >>>>> The Sage Notebook isn't likely to work under the WSL. It's a text >>>>> console environment only. Microsoft intended it mainly to provide Linux >>>>> development tools to people, not as a way of running graphical >>>>> applications. >>>>> >>>> >>>> Hmm, no, all what gets to run here is a web server (on a local port) >>>> talking to a Sage backend. Graphics happens in a web browser, so it should >>>> not be a problem of being "text console only". >>>> >>>> >>>>> >>>>> You can probably fix the memory allocation issues though. You likely >>>>> need to increase the Pagefile system size. Windows allocates a >>>>> ridiculously >>>>> small amount of memory for this. >>>>> >>>>> There's a walkthrough here: >>>>> >>>>> http://www.softwareok.com/?seite=faq-Windows-10&faq=52 >>>>> >>>>> I use 16GB on my system (of course you need enough disk space). >>>>> >>>>> Bill. >>>>> >>>>> On Monday, 5 December 2016 11:24:21 UTC+1, GK wrote: >>>>>> >>>>>> Hi from me. My (more recent) experience is similar but not identical. >>>>>> I install sage from the ppa and I am having problems. Sage loads and >>>>>> seems >>>>>> to be working, but: >>>>>> >>>>>> ┌────────────────────────────────────────────────────────────────────┐ >>>>>> │ SageMath version 7.3, Release Date: 2016-08-04 │ >>>>>> │ Type "notebook()" for the browser-based notebook interface. │ >>>>>> │ Type "help()" for help. │ >>>>>> └────────────────────────────────────────────────────────────────────┘ >>>>>> sage: gp.eval('2+2') >>>>>> >>>>>> --------------------------------------------------------------------------- >>>>>> OSError Traceback (most recent call >>>>>> last) >>>>>> <ipython-input-1-e5d4083fb83e> in <module>() >>>>>> ----> 1 gp.eval('2+2') >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/expect.pyc >>>>>> >>>>>> in eval(self, code, strip, synchronize, locals, allow_use_file, >>>>>> split_lines, **kwds) >>>>>> 1292 elif split_lines: >>>>>> 1293 return '\n'.join([self._eval_line(L, >>>>>> allow_use_file=allow_use_file, **kwds) >>>>>> -> 1294 for L in >>>>>> code.split('\n') if L != '']) >>>>>> 1295 else: >>>>>> 1296 return self._eval_line(code, >>>>>> allow_use_file=allow_use_file, **kwds) >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/gp.pyc >>>>>> >>>>>> in _eval_line(self, line, allow_use_file, wait_for_prompt, >>>>>> restart_if_needed) >>>>>> 439 a = Expect._eval_line(self, line, >>>>>> 440 allow_use_file=allow_use_file, >>>>>> --> 441 wait_for_prompt=wait_for_prompt) >>>>>> 442 if a.find("the PARI stack overflows") != -1: >>>>>> 443 verbose("automatically doubling the PARI stack >>>>>> and re-executing current input line") >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/expect.pyc >>>>>> >>>>>> in _eval_line(self, line, allow_use_file, wait_for_prompt, >>>>>> restart_if_needed) >>>>>> 903 try: >>>>>> 904 if self._expect is None: >>>>>> --> 905 self._start() >>>>>> 906 E = self._expect >>>>>> 907 try: >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/gp.pyc >>>>>> >>>>>> in _start(self, alt_message, block_during_init) >>>>>> 239 >>>>>> 240 def _start(self, alt_message=None, >>>>>> block_during_init=True): >>>>>> --> 241 Expect._start(self, alt_message, block_during_init) >>>>>> 242 # disable timer >>>>>> 243 self._eval_line('default(timer,0);') >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/expect.pyc >>>>>> >>>>>> in _start(self, alt_message, block_during_init) >>>>>> 480 env=pexpect_env, >>>>>> 481 name=self._repr_(), >>>>>> --> 482 quit_string=self._quit_string()) >>>>>> 483 except (ExceptionPexpect, pexpect.EOF) as e: >>>>>> 484 # Change pexpect errors to RuntimeError >>>>>> >>>>>> sage/interfaces/sagespawn.pyx in >>>>>> sage.interfaces.sagespawn.SageSpawn.__init__ >>>>>> (/usr/lib/sagemath//src/build/cythonized/sage/interfaces/sagespawn.c:1446)() >>>>>> >>>>>> sage/interfaces/sagespawn.pyx in >>>>>> sage.interfaces.sagespawn.SageSpawn.__init__ >>>>>> (/usr/lib/sagemath//src/build/cythonized/sage/interfaces/sagespawn.c:1398)() >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/pexpect/pty_spawn.pyc >>>>>> >>>>>> in __init__(self, command, args, timeout, maxread, searchwindowsize, >>>>>> logfile, cwd, env, ignore_sighup, echo, preexec_fn, encoding, >>>>>> codec_errors, >>>>>> dimensions) >>>>>> 196 self.name = '<pexpect factory incomplete>' >>>>>> 197 else: >>>>>> --> 198 self._spawn(command, args, preexec_fn, dimensions) >>>>>> 199 >>>>>> 200 def __str__(self): >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/pexpect/pty_spawn.pyc >>>>>> >>>>>> in _spawn(self, command, args, preexec_fn, dimensions) >>>>>> 296 >>>>>> 297 self.ptyproc = self._spawnpty(self.args, env=self.env, >>>>>> --> 298 cwd=self.cwd, **kwargs) >>>>>> 299 >>>>>> 300 self.pid = self.ptyproc.pid >>>>>> >>>>>> sage/interfaces/sagespawn.pyx in >>>>>> sage.interfaces.sagespawn.SageSpawn._spawnpty >>>>>> (/usr/lib/sagemath//src/build/cythonized/sage/interfaces/sagespawn.c:1631)() >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/ptyprocess/ptyprocess.pyc >>>>>> >>>>>> in spawn(cls, argv, cwd, env, echo, preexec_fn, dimensions) >>>>>> 218 >>>>>> 219 if use_native_pty_fork: >>>>>> --> 220 pid, fd = pty.fork() >>>>>> 221 else: >>>>>> 222 # Use internal fork_pty, for Solaris >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python/pty.pyc in fork() >>>>>> 106 >>>>>> 107 master_fd, slave_fd = openpty() >>>>>> --> 108 pid = os.fork() >>>>>> 109 if pid == CHILD: >>>>>> 110 # Establish a new session. >>>>>> >>>>>> OSError: [Errno 12] Cannot allocate memory >>>>>> sage: >>>>>> >>>>>> and I cannot load the notebook interface: >>>>>> >>>>>> sage: notebook() >>>>>> >>>>>> --------------------------------------------------------------------------- >>>>>> EnvironmentError Traceback (most recent call >>>>>> last) >>>>>> <ipython-input-2-3728cb3d7c7d> in <module>() >>>>>> ----> 1 notebook() >>>>>> >>>>>> sage/misc/lazy_import.pyx in >>>>>> sage.misc.lazy_import.LazyImport.__call__ >>>>>> (/usr/lib/sagemath//src/build/cythonized/sage/misc/lazy_import.c:3635)() >>>>>> >>>>>> sage/misc/lazy_import.pyx in >>>>>> sage.misc.lazy_import.LazyImport._get_object >>>>>> (/usr/lib/sagemath//src/build/cythonized/sage/misc/lazy_import.c:2242)() >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sagenb/notebook/notebook_object.py >>>>>> >>>>>> in <module>() >>>>>> 15 import time, os, shutil, signal, tempfile >>>>>> 16 >>>>>> ---> 17 import notebook as _notebook >>>>>> 18 >>>>>> 19 import run_notebook >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sagenb/notebook/notebook.py >>>>>> >>>>>> in <module>() >>>>>> 33 >>>>>> 34 # Sage libraries >>>>>> ---> 35 from sagenb.misc.misc import (pad_zeros, cputime, tmp_dir, >>>>>> load, save, >>>>>> 36 ignore_nonexistent_files, >>>>>> unicode_str) >>>>>> 37 >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sagenb/misc/misc.py >>>>>> in <module>() >>>>>> 379 >>>>>> 380 try: >>>>>> --> 381 from sage.misc.cython import cython >>>>>> 382 except ImportError: >>>>>> 383 @stub >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/misc/cython.py >>>>>> in <module>() >>>>>> 28 >>>>>> 29 # CBLAS can be one of multiple implementations >>>>>> ---> 30 cblas_pc = pkgconfig.parse('cblas') >>>>>> 31 cblas_libs = list(cblas_pc['libraries']) >>>>>> 32 cblas_library_dirs = list(cblas_pc['library_dirs']) >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/pkgconfig-1.1.0-py2.7.egg/pkgconfig/pkgconfig.py >>>>>> >>>>>> in parse(packages) >>>>>> 185 >>>>>> 186 for package in packages.split(): >>>>>> --> 187 for k, v in parse_package(package).items(): >>>>>> 188 result[k].update(v) >>>>>> 189 >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/pkgconfig-1.1.0-py2.7.egg/pkgconfig/pkgconfig.py >>>>>> >>>>>> in parse_package(package) >>>>>> 158 >>>>>> 159 # Execute the query to pkg-config and clean the >>>>>> result. >>>>>> --> 160 out = _query(package, '--cflags --libs') >>>>>> 161 out = out.replace('\\"', '') >>>>>> 162 >>>>>> >>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/pkgconfig-1.1.0-py2.7.egg/pkgconfig/pkgconfig.py >>>>>> >>>>>> in _wrapper(*args, **kwargs) >>>>>> 56 >>>>>> Enter code here... >>>>>> >>>>>> >>>>>> return func(*args, **kwargs) >>>>>> 57 except OSError: >>>>>> ---> 58 raise EnvironmentError("pkg-config is not >>>>>> installed") >>>>>> 59 >>>>>> 60 return _wrapper >>>>>> >>>>>> EnvironmentError: pkg-config is not installed >>>>>> sage: >>>>>> >>>>>> while I do have pkg-config installed. >>>>>> >>>>>> On Wednesday, May 18, 2016 at 5:07:02 PM UTC+3, William wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Wednesday, May 18, 2016, Brian Beavers <drbeav...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Looks like there's more going on than just a lack of pty. Here's >>>>>>>> the result: >>>>>>>> >>>>>>>> >>>>>>> Well that is just another test of pty... >>>>>>> >>>>>>> >>>>>>> >>>>>>>> sage: gp.eval('2+2') >>>>>>>> >>>>>>>> --------------------------------------------------------------------------- >>>>>>>> OSError Traceback (most recent >>>>>>>> call last) >>>>>>>> <ipython-input-1-e5d4083fb83e> in <module>() >>>>>>>> ----> 1 gp.eval('2+2') >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/expect.pyc >>>>>>>> >>>>>>>> in eval(self, code, strip, synchronize, locals, allow_use_file, >>>>>>>> split_lines, **kwds) >>>>>>>> 1237 elif split_lines: >>>>>>>> 1238 return '\n'.join([self._eval_line(L, >>>>>>>> allow_use_file=allow_use_file, **kwds) >>>>>>>> -> 1239 for L in >>>>>>>> code.split('\n') if L != '']) >>>>>>>> 1240 else: >>>>>>>> 1241 return self._eval_line(code, >>>>>>>> allow_use_file=allow_use_file, **kwds) >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/gp.pyc >>>>>>>> >>>>>>>> in _eval_line(self, line, allow_use_file, wait_for_prompt, >>>>>>>> restart_if_needed) >>>>>>>> 437 a = Expect._eval_line(self, line, >>>>>>>> 438 allow_use_file=allow_use_file, >>>>>>>> --> 439 >>>>>>>> wait_for_prompt=wait_for_prompt) >>>>>>>> 440 if a.find("the PARI stack overflows") != -1: >>>>>>>> 441 verbose("automatically doubling the PARI stack >>>>>>>> and re-executing current input line") >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/expect.pyc >>>>>>>> >>>>>>>> in _eval_line(self, line, allow_use_file, wait_for_prompt, >>>>>>>> restart_if_needed) >>>>>>>> 848 try: >>>>>>>> 849 if self._expect is None: >>>>>>>> --> 850 self._start() >>>>>>>> 851 E = self._expect >>>>>>>> 852 try: >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/gp.pyc >>>>>>>> >>>>>>>> in _start(self, alt_message, block_during_init) >>>>>>>> 237 >>>>>>>> 238 def _start(self, alt_message=None, >>>>>>>> block_during_init=True): >>>>>>>> --> 239 Expect._start(self, alt_message, block_during_init) >>>>>>>> 240 # disable timer >>>>>>>> 241 self._eval_line('default(timer,0);') >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/sage/interfaces/expect.pyc >>>>>>>> >>>>>>>> in _start(self, alt_message, block_during_init) >>>>>>>> 423 env=pexpect_env, >>>>>>>> 424 name=self._repr_(), >>>>>>>> --> 425 quit_string=self._quit_string()) >>>>>>>> 426 except (ExceptionPexpect, pexpect.EOF) as e: >>>>>>>> 427 # Change pexpect errors to RuntimeError >>>>>>>> >>>>>>>> sage/interfaces/sagespawn.pyx in >>>>>>>> sage.interfaces.sagespawn.SageSpawn.__init__ >>>>>>>> (/usr/lib/sagemath//src/build/cythonized/sage/interfaces/sagespawn.c:1331)() >>>>>>>> >>>>>>>> sage/interfaces/sagespawn.pyx in >>>>>>>> sage.interfaces.sagespawn.SageSpawn.__init__ >>>>>>>> (/usr/lib/sagemath//src/build/cythonized/sage/interfaces/sagespawn.c:1284)() >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/pexpect/pty_spawn.pyc >>>>>>>> >>>>>>>> in __init__(self, command, args, timeout, maxread, searchwindowsize, >>>>>>>> logfile, cwd, env, ignore_sighup, echo, preexec_fn, encoding, >>>>>>>> codec_errors, >>>>>>>> dimensions) >>>>>>>> 191 self.name = '<pexpect factory incomplete>' >>>>>>>> 192 else: >>>>>>>> --> 193 self._spawn(command, args, preexec_fn, >>>>>>>> dimensions) >>>>>>>> 194 >>>>>>>> 195 def __str__(self): >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/pexpect/pty_spawn.pyc >>>>>>>> >>>>>>>> in _spawn(self, command, args, preexec_fn, dimensions) >>>>>>>> 286 >>>>>>>> 287 self.ptyproc = self._spawnpty(self.args, >>>>>>>> env=self.env, >>>>>>>> --> 288 cwd=self.cwd, **kwargs) >>>>>>>> 289 >>>>>>>> 290 self.pid = self.ptyproc.pid >>>>>>>> >>>>>>>> sage/interfaces/sagespawn.pyx in >>>>>>>> sage.interfaces.sagespawn.SageSpawn._spawnpty >>>>>>>> (/usr/lib/sagemath//src/build/cythonized/sage/interfaces/sagespawn.c:1520)() >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python2.7/site-packages/ptyprocess/ptyprocess.pyc >>>>>>>> >>>>>>>> in spawn(cls, argv, cwd, env, echo, preexec_fn, dimensions) >>>>>>>> 218 >>>>>>>> 219 if use_native_pty_fork: >>>>>>>> --> 220 pid, fd = pty.fork() >>>>>>>> 221 else: >>>>>>>> 222 # Use internal fork_pty, for Solaris >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python/pty.pyc in fork() >>>>>>>> 105 return pid, fd >>>>>>>> 106 >>>>>>>> --> 107 master_fd, slave_fd = openpty() >>>>>>>> 108 pid = os.fork() >>>>>>>> 109 if pid == CHILD: >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python/pty.pyc in openpty() >>>>>>>> 27 except (AttributeError, OSError): >>>>>>>> 28 pass >>>>>>>> ---> 29 master_fd, slave_name = _open_terminal() >>>>>>>> 30 slave_fd = slave_open(slave_name) >>>>>>>> 31 return master_fd, slave_fd >>>>>>>> >>>>>>>> /usr/lib/sagemath/local/lib/python/pty.pyc in _open_terminal() >>>>>>>> 68 continue >>>>>>>> 69 return (fd, '/dev/tty' + x + y) >>>>>>>> ---> 70 raise os.error, 'out of pty devices' >>>>>>>> 71 >>>>>>>> 72 def slave_open(tty_name): >>>>>>>> >>>>>>>> OSError: out of pty devices >>>>>>>> >>>>>>>> >>>>>>>> Brian Beavers, Ph.D., Associate Professor >>>>>>>> Department of Mathematics & Statistics >>>>>>>> Stephen F. Austin State University >>>>>>>> >>>>>>>> On Wed, May 18, 2016 at 8:50 AM, William Stein <wst...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Wednesday, May 18, 2016, Brian Beavers <drbeavers...@gmail.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> I've discovered why the notebook server (and administrative pages >>>>>>>>>> within) loads but notebooks do not load: WSL does not yet suppot >>>>>>>>>> pty. When >>>>>>>>>> I try to create a worksheet, back in the terminal Sage throws an >>>>>>>>>> error that >>>>>>>>>> it is out of pty instances. >>>>>>>>>> >>>>>>>>>> >>>>>>>>> What happens if you do >>>>>>>>> >>>>>>>>> gp.eval('2+2') >>>>>>>>> >>>>>>>>> in the terminal? >>>>>>>>> >>>>>>>>> Also, unlike sagenb, jupyter doesn't use pty's so it won't have >>>>>>>>> this obstruction. >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Brian Beavers, Ph.D., Associate Professor >>>>>>>>>> Department of Mathematics & Statistics >>>>>>>>>> Stephen F. Austin State University >>>>>>>>>> >>>>>>>>>> On Mon, May 16, 2016 at 2:31 AM, Dima Pasechnik < >>>>>>>>>> dimp...@gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> one can do graphics in a browser running on the host, so this is >>>>>>>>>>> not really a big limitation. >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> 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. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> 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. >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Sent from my massive iPhone 6 plus. >>>>>>>>> >>>>>>>>> -- >>>>>>>>> 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. >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>>> -- >>>>>>>> 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. >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Sent from my massive iPhone 6 plus. >>>>>>> >>>>>>
-- 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.