Re: [sage-devel] Re: New package creation - advice/help requested

2023-07-05 Thread Aram Dermenjian
In essence, yes we're expecting to change much of the code as the structure
will be changing in addition to fixes to some major bugs in the code.
Moreover, I'm working on this with two (undergraduate) interns that I have
and so they're newer to programming so I wanted them to work in a more
"sandbox" environment before fully integrating it into sage.

I hadn't heard about a push to get more cython. Is this becoming more
standard?

Aram

On Mon, 3 Jul 2023 at 01:56, 'Travis Scrimshaw' via sage-devel <
sage-devel@googlegroups.com> wrote:

> Hi Aram,
>Can you explain a bit more why you aren't just integrating it into Sage
> now? Are you're expecting to have major API changes? There would likely be
> a push to change to using more Cython, but it doesn't need to be feature
> complete to be a part of Sage and internal/implementation details are easy
> to change.
>
> Best,
> Travis
>
> On Friday, June 30, 2023 at 1:27:30 AM UTC+9 Matthias Koeppe wrote:
>
>> On Thursday, June 29, 2023 at 3:01:58 AM UTC-7 Aram Dermenjian wrote:
>>
>> it seems the method I was using to create a new package is no longer
>> valid. For example, when I try and do an install, I get the following error:
>>
>>  SetuptoolsDeprecationWarning: setup.py install is deprecated. Use
>> build and pip and other standards-based tools.
>>
>>
>> It's not an error. If you already use "pip install" to install your
>> package, no action is needed.
>> But you may want to learn about pyproject.toml (see the setuptools docs)
>>
>> --
> 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 view this discussion on the web visit
> https://groups.google.com/d/msgid/sage-devel/e5495aae-4978-41df-bc4b-f1cce649dbe7n%40googlegroups.com
> 
> .
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAKQMtipTgRz_fKC3icWPBpAnXuSz0ujsz%2ByBnj4Sxv3xEAA%2BQA%40mail.gmail.com.


[sage-devel] Exception in `G=Graph([("A",1)]);G.faces()`

2023-07-05 Thread Georgi Guninski
Hi sage devs, your daily dose of incomparable objects,
fix 'em while they are free ;)

G=Graph([("A",1)]);G.faces()

TypeError Traceback (most recent call last)
Cell In [1], line 1
> 1 G=Graph([("A",Integer(1))]);G.faces()

File /home/sc_serv/sage/src/sage/graphs/generic_graph.py:6385, in
GenericGraph.faces(self, embedding)
   6383 # Storage for face paths
   6384 faces = []
-> 6385 minedge = min(edgeset)
   6386 path = [minedge]
   6387 edgeset.discard(minedge)

TypeError: '<' not supported between instances of 'int' and 'str'

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAGUWgD9FgmX2g3%2BpoiY9PJRKK%2BzGT_8MK4L8CuPD3N81jcZDsQ%40mail.gmail.com.


[sage-devel] Re: grep-ing for sort() in graphs

2023-07-05 Thread David Coudert
Most of these calls are done on purpose and safe, but some may raise an 
error.

> ./base/static_sparse_backend.pyx:512: vertices.sort() 
It's inside a try ... except...  statement. We may certainly remove it in 
the future.

> ./base/static_sparse_graph.pxd:10: void qsort(void *base, int  nmemb, int 
size, 
This is the declaration of a sort method

> ./base/static_sparse_graph.pyx:293: qsort(g.neighbors[i],  
g.neighbors[i+1] - g.neighbors[i], sizeof(int), compare_uint32_p) 
Sort integers, so it's OK.

> ./graph_decompositions/vertex_separation.pyx:1841: delta.sort() 
The list delta contains only tuples (int, int), so it's fine.

> ./connectivity.pyx:287: c.sort() 
This one is considered in https://github.com/sagemath/sage/pull/35891

> ./generic_graph.py:3413: multi_edges.sort() 
> ./generic_graph.py:12124: output.sort() 

These two calls mays lead to an error when parameter `sort` is set to 
`True` by users. We should at least add parameter `key` to the method -> 
TODO

> ./generic_graph.py:21508: sage: lap.sort(reverse=True) 
Inside a doctest. Done carefully.

> ./generic_graph.py:21521: evals.sort(reverse=True) 
Sorts a list of eigenvalues, so it's fine.

> ./graph.py:2715: e.sort() 
Always sorts integer values. See method  `is_edge_transitive`

> ./graph_database.py:75: degree_sequence.sort() 
Sorts a list of integers (degree sequence), so it's fine.

> ./schnyder.py:278: l.sort() 
> ./schnyder.py:427: ones.sort() 
> ./schnyder.py:428: twos.sort() 
> ./schnyder.py:429: threes.sort() 
I don't know if these calls are safe or not. This code is used only in 
`src/sage/combinat/interval_posets.py`.
Someone with expertise in this code should certainly improve it to make it 
safer and more efficient. 


On Tuesday, July 4, 2023 at 8:36:42 AM UTC+2 Georgi Guninski wrote:

> In a QA attempt I tried to find calling sort() in graphs without
> |key|, which may raise exception.
>
> On sage 9.6:
>
> $cd /usr/lib64/python3.11/site-packages/sage/graphs/
> $grep -rnI 'sort(' . | grep -v 'key=' | grep -v 'topological'
>
> #15 results
>
>
> ./base/static_sparse_backend.pyx:512: vertices.sort()
> ./base/static_sparse_graph.pxd:10: void qsort(void *base, int
> nmemb, int size,
> ./base/static_sparse_graph.pyx:293: qsort(g.neighbors[i],
> g.neighbors[i+1] - g.neighbors[i], sizeof(int), compare_uint32_p)
> ./graph_decompositions/vertex_separation.pyx:1841: delta.sort()
> ./connectivity.pyx:287: c.sort()
> ./generic_graph.py:3413: multi_edges.sort()
> ./generic_graph.py:12124: output.sort()
> ./generic_graph.py:21508: sage: lap.sort(reverse=True)
> ./generic_graph.py:21521: evals.sort(reverse=True)
> ./graph.py:2715: e.sort()
> ./graph_database.py:75: degree_sequence.sort()
> ./schnyder.py:278: l.sort()
> ./schnyder.py:427: ones.sort()
> ./schnyder.py:428: twos.sort()
> ./schnyder.py:429: threes.sort()
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/cff21737-c883-4ef6-a9a1-d306b9f379ecn%40googlegroups.com.


[sage-devel] Re: Exception in `G=Graph([("A",1)]);G.faces()`

2023-07-05 Thread David Coudert
I have opened https://github.com/sagemath/sage/issues/35902 to collect such 
kind of issues.
Please use it to share new cases.

On Wednesday, July 5, 2023 at 9:38:28 AM UTC+2 Georgi Guninski wrote:

> Hi sage devs, your daily dose of incomparable objects,
> fix 'em while they are free ;)
>
> G=Graph([("A",1)]);G.faces()
>
> TypeError Traceback (most recent call last)
> Cell In [1], line 1
> > 1 G=Graph([("A",Integer(1))]);G.faces()
>
> File /home/sc_serv/sage/src/sage/graphs/generic_graph.py:6385, in
> GenericGraph.faces(self, embedding)
> 6383 # Storage for face paths
> 6384 faces = []
> -> 6385 minedge = min(edgeset)
> 6386 path = [minedge]
> 6387 edgeset.discard(minedge)
>
> TypeError: '<' not supported between instances of 'int' and 'str'
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/93544bee-8801-4cad-a319-b41acc418a2an%40googlegroups.com.


[sage-devel] Memory leak (quite bad)

2023-07-05 Thread Gonzalo Tornaria
This slowly and inexorably goes on. Computing `sqrt(T2)` leaks 32 bytes 
each and every time (asymptotically).

Found by a student who, through no fault of himself, brought down our 
server (unable to ssh in until the OOM triggered -- but since the leak is 
slow it takes a while to trash 16G of swap).

===
$ cat memleak.py 
from sage.all import sqrt
T2 = sqrt(2)
import psutil
ps = psutil.Process()
base = ps.memory_info().rss
for a in range(1, 10):
for b in range(num := 100_000):
C = sqrt(T2)
mem = ps.memory_info().rss - base
print(f"{mem/1e6 :.2f} MB ({mem/a/num :.2f} bytes/iter)")
$ sage memleak.py 
2.70 MB (27.03 bytes/iter)
5.95 MB (29.74 bytes/iter)
9.19 MB (30.64 bytes/iter)
12.44 MB (31.09 bytes/iter)
15.41 MB (30.82 bytes/iter)
18.65 MB (31.09 bytes/iter)
21.90 MB (31.28 bytes/iter)
25.14 MB (31.43 bytes/iter)
28.39 MB (31.54 bytes/iter)
===

Replace the 10 in the outer loop by something larger at your own peril 
(each outer iteration will take 3.2M so 10_000 should kill a laptop in an 
hour or two).

This is with system sagemath 10.0 but it also happens with 9.6, 9.7, 9.8 
and 10.0 in cocalc.com.

Best,
Gonzalo

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/26ec41f7-c591-48b6-ab57-463b8b8a1675n%40googlegroups.com.


Re: [sage-devel] Memory leak (quite bad)

2023-07-05 Thread Edgar Costa
Hi Gonzalo,

I highly recommend using https://github.com/rfjakob/earlyoom instead of
waiting for OOM to kick in.

Cheers,
Edgar

On Wed, Jul 5, 2023 at 11:24 AM Gonzalo Tornaria  wrote:

> This slowly and inexorably goes on. Computing `sqrt(T2)` leaks 32 bytes
> each and every time (asymptotically).
>
> Found by a student who, through no fault of himself, brought down our
> server (unable to ssh in until the OOM triggered -- but since the leak is
> slow it takes a while to trash 16G of swap).
>
> ===
> $ cat memleak.py
> from sage.all import sqrt
> T2 = sqrt(2)
> import psutil
> ps = psutil.Process()
> base = ps.memory_info().rss
> for a in range(1, 10):
> for b in range(num := 100_000):
> C = sqrt(T2)
> mem = ps.memory_info().rss - base
> print(f"{mem/1e6 :.2f} MB ({mem/a/num :.2f} bytes/iter)")
> $ sage memleak.py
> 2.70 MB (27.03 bytes/iter)
> 5.95 MB (29.74 bytes/iter)
> 9.19 MB (30.64 bytes/iter)
> 12.44 MB (31.09 bytes/iter)
> 15.41 MB (30.82 bytes/iter)
> 18.65 MB (31.09 bytes/iter)
> 21.90 MB (31.28 bytes/iter)
> 25.14 MB (31.43 bytes/iter)
> 28.39 MB (31.54 bytes/iter)
> ===
>
> Replace the 10 in the outer loop by something larger at your own peril
> (each outer iteration will take 3.2M so 10_000 should kill a laptop in an
> hour or two).
>
> This is with system sagemath 10.0 but it also happens with 9.6, 9.7, 9.8
> and 10.0 in cocalc.com.
>
> Best,
> Gonzalo
>
> --
> 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 view this discussion on the web visit
> https://groups.google.com/d/msgid/sage-devel/26ec41f7-c591-48b6-ab57-463b8b8a1675n%40googlegroups.com
> 
> .
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CA%2BiQ7x47X70AMHpkzZ10sL7UQs0zPLvjHhAU-Lc2cwjeWGPiVA%40mail.gmail.com.


Re: [sage-devel] Re: Exception in `G=Graph([("A",1)]);G.faces()`

2023-07-05 Thread Georgi Guninski
On Wed, Jul 5, 2023 at 4:05 PM David Coudert  wrote:
>
> I have opened https://github.com/sagemath/sage/issues/35902 to collect such 
> kind of issues.
> Please use it to share new cases.
>
I just reported a bug on github, though I don't like microsoft services at all.

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAGUWgD98uLfnfNqccXP8WGA3NuvFn6yCZuTERkacMsW1ByM-hQ%40mail.gmail.com.


[sage-devel] Re: Memory leak (quite bad)

2023-07-05 Thread Nils Bruin
The leak does not seem to be on the python heap, so Pynac is the next 
likely candidate (I don't think this code should be hitting maxima_lib)

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/0deb15ac-839e-40b3-977b-424ce380b70an%40googlegroups.com.


Re: [sage-devel] Re: Exception in `G=Graph([("A",1)]);G.faces()`

2023-07-05 Thread Vincent Delecroix
On Wed, 5 Jul 2023 at 17:51, Georgi Guninski  wrote:
>
> On Wed, Jul 5, 2023 at 4:05 PM David Coudert  wrote:
> >
> > I have opened https://github.com/sagemath/sage/issues/35902 to collect such 
> > kind of issues.
> > Please use it to share new cases.
> >
> I just reported a bug on github, though I don't like microsoft services at 
> all.

Is google any better?

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAGEwAA%3D5K22ZxY7Ea7Sjn5-udvdQD-C_4atABZxVdp75UEXvkQ%40mail.gmail.com.


Re: [sage-devel] Re: Exception in `G=Graph([("A",1)]);G.faces()`

2023-07-05 Thread Georgi Guninski
On Wed, Jul 5, 2023 at 8:02 PM Vincent Delecroix
<20100.delecr...@gmail.com> wrote:
>
> On Wed, 5 Jul 2023 at 17:51, Georgi Guninski  wrote:
> >
> > I just reported a bug on github, though I don't like microsoft services at 
> > all.
>
> Is google any better?
>
That is an open problem for me. I don't like them too,
they collect a lot of info.
At least google are technically skilled IMHO.

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAGUWgD-CNTbtw7DUhkp_XaPwW2_whLBGWPtGQzr7MBberRuAiQ%40mail.gmail.com.


Re: [sage-devel] Graph([('A','B'),(1,2)]).edges() raises weird traceback

2023-07-05 Thread David Coudert
The current design choice in `EdgesView` is to sort only when asking for 
the list of edges, that is when calling `__repr__` if `sort=True`. 
The alternative is to sort at the initialization of the object and to cache 
the sorted list of edges in the object.
Should we go for this alternative implementation ?

On Wednesday, July 5, 2023 at 8:48:05 AM UTC+2 Vincent Delecroix wrote:

> To my mind, this is not the problem. The first command does generate a
> warning (fine)
>
> sage: E = Graph([('A','B'),(1,2)]).edges()
> :1: DeprecationWarning: parameter 'sort'
> will be set to False by default in the future
> See https://github.com/sagemath/sage/issues/27408 for details.
>
> But the EdgesView.__repr__ is buggy (bad)
>
> sage: E
> ) failed:
> TypeError: unsupported operand parent(s) for <: 'Integer Ring' and
> ''>
>
> I think that either E is broken from start and an error should have
> been raised in the first stage or everything is fine and we should
> have a proper string representation.
>
> On Wed, 5 Jul 2023 at 08:33, David Coudert  wrote:
> >
> > There is an active deprecation warning in method edges(). Parameter sort 
> will be set to False in the future. I'm surprised you don't see it.
> >
> > sage: Graph([('A','B'),(1,2)]).edges()
> > :1: DeprecationWarning: parameter 'sort' 
> will be set to False by default in the future See 
> https://github.com/sagemath/sage/issues/27408 for details.
> > Graph([('A','B'),(Integer(1),Integer(2))]).edges() 
> ) failed: TypeError: 
> unsupported operand parent(s) for <: 'Integer Ring' and ''>
> >
> >
> > On Tuesday, July 4, 2023 at 4:29:21 PM UTC+2 Vincent Delecroix wrote:
> >>
> >> https://github.com/sagemath/sage/issues/35897
> >>
> >> On Tue, 4 Jul 2023 at 16:25, Vincent Delecroix
> >> <20100.d...@gmail.com> wrote:
> >> >
> >> > This is a bug in the __repr__ method of EdgesView. Thanks for your 
> report.
> >> >
> >> > On Tue, 4 Jul 2023 at 10:52, Georgi Guninski  
> wrote:
> >> > >
> >> > > Graph([('A','B'),(1,2)]).edges()
> >> > > ) failed:
> >> > > TypeError: unsupported operand parent(s) for <: 'Integer Ring' and
> >> > > ''>
> >> > >
> >> > > I think this is related to sorting the edges.
> >> > >
> >> > > The following works:
> >> > > sage: Graph([("A",1),("B",2)]).edges()
> >> > > [(1, 'A', None), (2, 'B', None)]
> >> > >
> >> > > --
> >> > > 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+...@googlegroups.com.
> >> > > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sage-devel/CAGUWgD9zHPdu2ifxaMOc%3DEaUN5B9A_v6RmDXMLkFLCvc-Etc0w%40mail.gmail.com
> .
> >
> > --
> > 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+...@googlegroups.com.
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sage-devel/1ec8c4cf-c0d5-4682-8d10-8e74d0779dfdn%40googlegroups.com
> .
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/af6e1bb0-9662-4994-ba14-28ffe010e68fn%40googlegroups.com.


Re: [sage-devel] Graph([('A','B'),(1,2)]).edges() raises weird traceback

2023-07-05 Thread Georgi Guninski
I am not sure I understand correctly, but if you give warning, you
already know with high probability that functionality will be broken
and besides the warning you will get exception.

Is this correct?

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAGUWgD_q07qJagHLd2OnssTBCNHkdpY8afgMGg8JrJXeamyKYg%40mail.gmail.com.


Re: [sage-devel] Graph([('A','B'),(1,2)]).edges() raises weird traceback

2023-07-05 Thread Vincent Delecroix
I do not like a solution involving a m log(m) cost at initialization.
EdgesView is supposed to be O(1) at construction right?

On Thu, 6 Jul 2023 at 06:54, David Coudert  wrote:
>
> The current design choice in `EdgesView` is to sort only when asking for the 
> list of edges, that is when calling `__repr__` if `sort=True`.
> The alternative is to sort at the initialization of the object and to cache 
> the sorted list of edges in the object.
> Should we go for this alternative implementation ?
>
> On Wednesday, July 5, 2023 at 8:48:05 AM UTC+2 Vincent Delecroix wrote:
>>
>> To my mind, this is not the problem. The first command does generate a
>> warning (fine)
>>
>> sage: E = Graph([('A','B'),(1,2)]).edges()
>> :1: DeprecationWarning: parameter 'sort'
>> will be set to False by default in the future
>> See https://github.com/sagemath/sage/issues/27408 for details.
>>
>> But the EdgesView.__repr__ is buggy (bad)
>>
>> sage: E
>> ) failed:
>> TypeError: unsupported operand parent(s) for <: 'Integer Ring' and
>> ''>
>>
>> I think that either E is broken from start and an error should have
>> been raised in the first stage or everything is fine and we should
>> have a proper string representation.
>>
>> On Wed, 5 Jul 2023 at 08:33, David Coudert  wrote:
>> >
>> > There is an active deprecation warning in method edges(). Parameter sort 
>> > will be set to False in the future. I'm surprised you don't see it.
>> >
>> > sage: Graph([('A','B'),(1,2)]).edges()
>> > :1: DeprecationWarning: parameter 'sort' 
>> > will be set to False by default in the future See 
>> > https://github.com/sagemath/sage/issues/27408 for details.
>> > Graph([('A','B'),(Integer(1),Integer(2))]).edges() 
>> > ) failed: TypeError: 
>> > unsupported operand parent(s) for <: 'Integer Ring' and ''>
>> >
>> >
>> > On Tuesday, July 4, 2023 at 4:29:21 PM UTC+2 Vincent Delecroix wrote:
>> >>
>> >> https://github.com/sagemath/sage/issues/35897
>> >>
>> >> On Tue, 4 Jul 2023 at 16:25, Vincent Delecroix
>> >> <20100.d...@gmail.com> wrote:
>> >> >
>> >> > This is a bug in the __repr__ method of EdgesView. Thanks for your 
>> >> > report.
>> >> >
>> >> > On Tue, 4 Jul 2023 at 10:52, Georgi Guninski  wrote:
>> >> > >
>> >> > > Graph([('A','B'),(1,2)]).edges()
>> >> > > ) failed:
>> >> > > TypeError: unsupported operand parent(s) for <: 'Integer Ring' and
>> >> > > ''>
>> >> > >
>> >> > > I think this is related to sorting the edges.
>> >> > >
>> >> > > The following works:
>> >> > > sage: Graph([("A",1),("B",2)]).edges()
>> >> > > [(1, 'A', None), (2, 'B', None)]
>> >> > >
>> >> > > --
>> >> > > 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+...@googlegroups.com.
>> >> > > To view this discussion on the web visit 
>> >> > > https://groups.google.com/d/msgid/sage-devel/CAGUWgD9zHPdu2ifxaMOc%3DEaUN5B9A_v6RmDXMLkFLCvc-Etc0w%40mail.gmail.com.
>> >
>> > --
>> > 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+...@googlegroups.com.
>> > To view this discussion on the web visit 
>> > https://groups.google.com/d/msgid/sage-devel/1ec8c4cf-c0d5-4682-8d10-8e74d0779dfdn%40googlegroups.com.
>
> --
> 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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/sage-devel/af6e1bb0-9662-4994-ba14-28ffe010e68fn%40googlegroups.com.

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sage-devel/CAGEwAAmFM9OEo%3DC2_qv%2BCX7wuBBoJKdhzJLwwPkoeeR_w7JVAQ%40mail.gmail.com.