Sage: Ticket #7288: Gomory-Hu Trees
https://trac.sagemath.org/ticket/7288
<p>
See <a class="ext-link" href="http://en.wikipedia.org/wiki/Gomory%E2%80%93Hu_tree"><span class="icon"></span>http://en.wikipedia.org/wiki/Gomory%E2%80%93Hu_tree</a>. (which explains the algorithm used)
</p>
<p>
Gomory-Hu trees are a classical decomposition of the edge connectivity of graphs, and this is not very long to write when one has a function for min-st-cut.
</p>
<p>
This patch also slightly improves edge_cut and vertex_cut, which was needed to implement gomory_hu_tree
</p>
<p>
Note : until <a class="closed ticket" href="https://trac.sagemath.org/ticket/7311" title="defect: Improve the add_constraint method from MixedIntegerLinearProgram (closed: fixed)">#7311</a> is reviewed and merged, some exceptions will be raised when testing the file generic_graph
</p>
<p>
Nathann
</p>
en-usSagehttps://trac.sagemath.org/chrome/site/logo_sagemath_trac.png
https://trac.sagemath.org/ticket/7288
Trac 1.1.6ncohenTue, 19 Jan 2010 08:29:17 GMTstatus, description changed; upstream set
https://trac.sagemath.org/ticket/7288#comment:1
https://trac.sagemath.org/ticket/7288#comment:1
<ul>
<li><strong>status</strong>
changed from <em>new</em> to <em>needs_review</em>
</li>
<li><strong>description</strong>
modified (<a href="/ticket/7288?action=diff&version=1">diff</a>)
</li>
<li><strong>upstream</strong>
set to <em>N/A</em>
</li>
</ul>
<p>
Here it is ! :-)
</p>
TicketncohenTue, 19 Jan 2010 08:30:08 GMTdescription changed
https://trac.sagemath.org/ticket/7288#comment:2
https://trac.sagemath.org/ticket/7288#comment:2
<ul>
<li><strong>description</strong>
modified (<a href="/ticket/7288?action=diff&version=2">diff</a>)
</li>
</ul>
TicketncohenTue, 23 Feb 2010 16:31:50 GMT
https://trac.sagemath.org/ticket/7288#comment:3
https://trac.sagemath.org/ticket/7288#comment:3
<p>
After a few comments from Alexandre... Thanks ! ;-)
</p>
<p>
Nathann
</p>
TicketabmasseTue, 23 Feb 2010 17:44:58 GMT
https://trac.sagemath.org/ticket/7288#comment:4
https://trac.sagemath.org/ticket/7288#comment:4
<p>
Nathann, there is something really weird: the patch I see with trac is not the same as the one I download. Maybe the server is down ? Could you upload it again just to be sure ? Thanks.
</p>
TicketabmasseTue, 23 Feb 2010 17:45:13 GMTcc set
https://trac.sagemath.org/ticket/7288#comment:5
https://trac.sagemath.org/ticket/7288#comment:5
<ul>
<li><strong>cc</strong>
<em>abmasse</em> added
</li>
</ul>
TicketabmasseTue, 23 Feb 2010 20:33:30 GMT
https://trac.sagemath.org/ticket/7288#comment:6
https://trac.sagemath.org/ticket/7288#comment:6
<p>
Never mind, Firefox wasn't refreshing the page properly.
</p>
TicketabmasseTue, 23 Feb 2010 21:29:49 GMTstatus changed
https://trac.sagemath.org/ticket/7288#comment:7
https://trac.sagemath.org/ticket/7288#comment:7
<ul>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>needs_work</em>
</li>
</ul>
<p>
Hello again !
I tested your patch with <code></code>sage -t generic_graph.py graph.py<code></code> and it works ok, but when I type <code></code>sage -t -optional generic_graph.py graph.py<code></code>, I get the following:
</p>
<pre class="wiki">[~/Applications/sage/devel/sage-t7288/sage/graphs]$ sage -t generic_graph.py graph.py
sage -t "devel/sage-t7288/sage/graphs/generic_graph.py"
[35.4 s]
sage -t "devel/sage-t7288/sage/graphs/graph.py"
[14.9 s]
----------------------------------------------------------------------
All tests passed!
Total time for all tests: 50.3 seconds
[~/Applications/sage/devel/sage-t7288/sage/graphs]$ sage -t -optional generic_graph.py graph.py
sage -t -optional "devel/sage-t7288/sage/graphs/generic_graph.py"
1 variables fixed
1 variables fixed
1 variables fixed
1 variables fixed
3 variables fixed
3 variables fixed
3 variables fixed
**********************************************************************
File "/Users/alexandre/Applications/sage/devel/sage-t7288/sage/graphs/generic_graph.py", line 3795:
sage: [cardinal, flow_graph] = g.flow('s','t',integer=True,value_only=False) # optional - requries GLPK or CBC
Exception raised:
Traceback (most recent call last):
File "/Users/alexandre/Applications/sage/local/bin/ncadoctest.py", line 1231, in run_one_test
self.run_one_example(test, example, filename, compileflags)
File "/Users/alexandre/Applications/sage/local/bin/sagedoctest.py", line 38, in run_one_example
OrigDocTestRunner.run_one_example(self, test, example, filename, compileflags)
File "/Users/alexandre/Applications/sage/local/bin/ncadoctest.py", line 1172, in run_one_example
compileflags, 1) in test.globs
File "<doctest __main__.example_65[9]>", line 1, in <module>
[cardinal, flow_graph] = g.flow('s','t',integer=True,value_only=False) # optional - requries GLPK or CBC###line 3795:
sage: [cardinal, flow_graph] = g.flow('s','t',integer=True,value_only=False) # optional - requries GLPK or CBC
File "/Users/alexandre/Applications/sage/local/lib/python/site-packages/sage/graphs/generic_graph.py", line 3818, in flow
p.set_objective(flow_sum(x))
File "mip.pyx", line 615, in sage.numerical.mip.MixedIntegerLinearProgram.set_objective (sage/numerical/mip.c:5170)
AttributeError: 'int' object has no attribute 'f'
**********************************************************************
File "/Users/alexandre/Applications/sage/devel/sage-t7288/sage/graphs/generic_graph.py", line 3796:
sage: flow_graph.delete_vertices(['s','t']) # optional - requries GLPK or CBC
Exception raised:
Traceback (most recent call last):
File "/Users/alexandre/Applications/sage/local/bin/ncadoctest.py", line 1231, in run_one_test
self.run_one_example(test, example, filename, compileflags)
File "/Users/alexandre/Applications/sage/local/bin/sagedoctest.py", line 38, in run_one_example
OrigDocTestRunner.run_one_example(self, test, example, filename, compileflags)
File "/Users/alexandre/Applications/sage/local/bin/ncadoctest.py", line 1172, in run_one_example
compileflags, 1) in test.globs
File "<doctest __main__.example_65[10]>", line 1, in <module>
flow_graph.delete_vertices(['s','t']) # optional - requries GLPK or CBC###line 3796:
sage: flow_graph.delete_vertices(['s','t']) # optional - requries GLPK or CBC
NameError: name 'flow_graph' is not defined
**********************************************************************
File "/Users/alexandre/Applications/sage/devel/sage-t7288/sage/graphs/generic_graph.py", line 3797:
sage: len(flow_graph.edges(labels=None)) # optional - requries GLPK or CBC
Exception raised:
Traceback (most recent call last):
File "/Users/alexandre/Applications/sage/local/bin/ncadoctest.py", line 1231, in run_one_test
self.run_one_example(test, example, filename, compileflags)
File "/Users/alexandre/Applications/sage/local/bin/sagedoctest.py", line 38, in run_one_example
OrigDocTestRunner.run_one_example(self, test, example, filename, compileflags)
File "/Users/alexandre/Applications/sage/local/bin/ncadoctest.py", line 1172, in run_one_example
compileflags, 1) in test.globs
File "<doctest __main__.example_65[11]>", line 1, in <module>
len(flow_graph.edges(labels=None)) # optional - requries GLPK or CBC###line 3797:
sage: len(flow_graph.edges(labels=None)) # optional - requries GLPK or CBC
NameError: name 'flow_graph' is not defined
**********************************************************************
File "/Users/alexandre/Applications/sage/devel/sage-t7288/sage/graphs/generic_graph.py", line 3954:
sage: g.vertex_disjoint_paths(0,1) # optional - requires GLPK or CBC
Exception raised:
Traceback (most recent call last):
File "/Users/alexandre/Applications/sage/local/bin/ncadoctest.py", line 1231, in run_one_test
self.run_one_example(test, example, filename, compileflags)
File "/Users/alexandre/Applications/sage/local/bin/sagedoctest.py", line 38, in run_one_example
OrigDocTestRunner.run_one_example(self, test, example, filename, compileflags)
File "/Users/alexandre/Applications/sage/local/bin/ncadoctest.py", line 1172, in run_one_example
compileflags, 1) in test.globs
File "<doctest __main__.example_67[3]>", line 1, in <module>
g.vertex_disjoint_paths(Integer(0),Integer(1)) # optional - requires GLPK or CBC###line 3954:
sage: g.vertex_disjoint_paths(0,1) # optional - requires GLPK or CBC
File "/Users/alexandre/Applications/sage/local/lib/python/site-packages/sage/graphs/generic_graph.py", line 3958, in vertex_disjoint_paths
[obj, flow_graph] = self.flow(s,t,value_only=False, integer=True, use_edge_labels=False, vertex_bound=True)
File "/Users/alexandre/Applications/sage/local/lib/python/site-packages/sage/graphs/generic_graph.py", line 3843, in flow
[p.add_constraint([flow[X][v] for X in g[v]],max=1) for v in g if v!=x and v!=y]
File "mip.pyx", line 670, in sage.numerical.mip.MixedIntegerLinearProgram.add_constraint (sage/numerical/mip.c:5484)
AttributeError: 'list' object has no attribute 'f'
**********************************************************************
2 items had failures:
3 of 12 in __main__.example_65
1 of 4 in __main__.example_67
***Test Failed*** 4 failures.
For whitespace errors, see the file /Users/alexandre/.sage//tmp/.doctest_generic_graph.py
[37.8 s]
sage -t -optional "devel/sage-t7288/sage/graphs/graph.py"
[17.0 s]
----------------------------------------------------------------------
The following tests failed:
</pre><p>
Note that I installed CBC so this is not an installation problem. I don't really understand where the error comes from. Do you think you could correct it ? As soon as it is done, I'll resume the review.
</p>
TicketncohenWed, 24 Feb 2010 15:38:06 GMT
https://trac.sagemath.org/ticket/7288#comment:8
https://trac.sagemath.org/ticket/7288#comment:8
<p>
I'm really sorry, but these bugs have also been fixed already... It is done in a very important patch, still waiting for review :
</p>
<p>
<a class="ext-link" href="http://trac.sagemath.org/sage_trac/ticket/7311"><span class="icon"></span>http://trac.sagemath.org/sage_trac/ticket/7311</a>
</p>
<p>
This can not really be included in the present patch, though... :-/
</p>
<p>
Nathann
</p>
TicketabmasseWed, 24 Feb 2010 16:17:41 GMT
https://trac.sagemath.org/ticket/7288#comment:9
https://trac.sagemath.org/ticket/7288#comment:9
<p>
Alright, so we have to wait for the ticket <a class="closed ticket" href="https://trac.sagemath.org/ticket/7311" title="defect: Improve the add_constraint method from MixedIntegerLinearProgram (closed: fixed)">#7311</a> to be reviewed. Could you precise in the description of this ticket which other tickets it depends on ? This way, it will be easier to review.
</p>
TicketncohenThu, 25 Feb 2010 12:31:42 GMTstatus, description changed
https://trac.sagemath.org/ticket/7288#comment:10
https://trac.sagemath.org/ticket/7288#comment:10
<ul>
<li><strong>status</strong>
changed from <em>needs_work</em> to <em>needs_review</em>
</li>
<li><strong>description</strong>
modified (<a href="/ticket/7288?action=diff&version=10">diff</a>)
</li>
</ul>
TicketabmasseFri, 05 Mar 2010 14:53:18 GMTstatus changed
https://trac.sagemath.org/ticket/7288#comment:11
https://trac.sagemath.org/ticket/7288#comment:11
<ul>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>needs_work</em>
</li>
</ul>
<p>
Hello, Nathann !
I looked at your patch and I'm getting more and more used to what it does. I just added a patch that change many different small things in the docstrings and in the code, but these are only formatting changes. I assume you won't agree with all of them (a lot are based on my style of programming, though I tried to respect yours as much as I could ;)) so feel free to put anything back to what it was if you don't agree.
</p>
<p>
Before I resume the review, I have some comments/questions on your code.
</p>
<ol><li>Around line 3109 of the file generic_graph.py, you write
<pre class="wiki">[p.add_constraint(v[x] + b[x][y] - v[y], min=0, max=0) for (x,y) in g.edges(labels=None)]
</pre></li></ol><p>
Maybe I'm wrong, but it seems it would be more readable and more efficient to simply write a <code>for</code> loop doing the same work. It is strange to create a list that you won't use anymore in the function. There are two other lines like this in the functions <code>vertex_cut</code> and <code>vertex_cover</code>. I understand you do it to save a line, but is it really worth it (maybe it is and you know why !) ?
</p>
<ol start="2"><li>The output of the function <code>edge_cut</code> and <code>vertex_cut</code> are either real numbers or lists. Wouldn't it be better to return real numbers or tuple instead ? There is no reason to use a list representation and tuples are closer to the mathematical notation.
</li></ol><ol start="3"><li>I changed a variable with name <code>l</code> by <code>label</code> since the letter <code>l</code> looks very much like the number <code>1</code>.
</li></ol><ol start="4"><li>In the Gomory-Hu function, you have a parameter <code>vertices</code> that you state is not useful for the user : doesn't it mean you should remove it ? I understand that you need this parameter for recursion purposes, but the user shouldn't see it ! You should create a private function doing all the work and another public one calling the private one with the initial parameter set accordingly.
</li></ol><p>
That's all for now. The rest seems fine, but I'll pay more attention to it once you've answered. Don't forget to apply my patch on top of yours before making any change !
</p>
TicketncohenSat, 06 Mar 2010 15:15:00 GMT
https://trac.sagemath.org/ticket/7288#comment:12
https://trac.sagemath.org/ticket/7288#comment:12
<p>
Hello !!
</p>
<ol><li>It was indeed just to save a line. At some point, I believed it made the code more readable, as one can directly look at the added constraint, while the "implicit" iterators are written later, but in the end it just looks like a sick way to write it ;-)
</li></ol><ol start="2"><li>I really do not mind. So in the end, if you think tuples would be better in this case, this sounds to me like a perfectly good reason to make it so ! ;-)
</li></ol><ol start="3"><li>+1
</li></ol><ol start="4"><li>Well. I am a bit lazy, and I thought writing a new function, + new docstrings just to avoid one parameter (which appears in the proof of the result, by the way) was a bit too much.. But same thing here : if you think this should be removed, I see no reason why it should stay...
</li></ol><ol start="5"><li>Your fixes in the docstrings : I agree with most of them, but I do not know what your way of writing INPUT: sections looks like when the reference is generated. I would like to compare the two :-)
</li></ol><p>
With the comments you made, it sounds like I should rewrite some parts of the code and sen a new patch, merged with the one you sent. Before doing it, can you tell me whether you have "pending" modifications on this patch ? If so, could you update your patch ? I will then take it, mix it with mine, and bring to the code the modifications you requested, but it would not be a good idea to do it now if you are also working on the same parts of the code...
</p>
<p>
Thank you again ! :-)
</p>
<p>
Nathann
</p>
TicketabmasseSat, 06 Mar 2010 15:36:48 GMT
https://trac.sagemath.org/ticket/7288#comment:13
https://trac.sagemath.org/ticket/7288#comment:13
<p>
I won't touch the patch anymore. Moreover, instead of submitting a completely new one, you can simply add one on top of mine.
</p>
<p>
If I have to make any other change, I'll do it after you've submitted a new patch.
</p>
<p>
I think next time will be a positive review. Sorry for making you work. As for item 4, I know it's time consuming to write two complete doctests, but it is really more readable for the user.
</p>
TicketncohenMon, 08 Mar 2010 17:18:12 GMTstatus changed
https://trac.sagemath.org/ticket/7288#comment:14
https://trac.sagemath.org/ticket/7288#comment:14
<ul>
<li><strong>status</strong>
changed from <em>needs_work</em> to <em>needs_review</em>
</li>
</ul>
<p>
What about this one ? :-)
</p>
<p>
(it includes your fixes)
</p>
<p>
Nathann
</p>
TicketncohenMon, 08 Mar 2010 23:42:32 GMT
https://trac.sagemath.org/ticket/7288#comment:15
https://trac.sagemath.org/ticket/7288#comment:15
<p>
This one is a new update. It includes the previous one, plus the bugfixes you requested. It is to be applied after <a class="closed ticket" href="https://trac.sagemath.org/ticket/7311" title="defect: Improve the add_constraint method from MixedIntegerLinearProgram (closed: fixed)">#7311</a>, which also fixed several errors.
</p>
<p>
With those two applied, everything should test nicely :-)
</p>
<p>
Nathann
</p>
TicketabmasseThu, 11 Mar 2010 00:22:22 GMT
https://trac.sagemath.org/ticket/7288#comment:16
https://trac.sagemath.org/ticket/7288#comment:16
<p>
Great ! All non optional tests passed, as well as optional ones ! You really fixed every error. I will give another look to your patch tomorrow, but this should easily be a positive review.
</p>
<p>
Thank you for your patience !
</p>
TicketabmasseThu, 11 Mar 2010 15:52:59 GMT
https://trac.sagemath.org/ticket/7288#comment:17
https://trac.sagemath.org/ticket/7288#comment:17
<p>
Some questions/comments:
</p>
<ol><li>You said you merged my patch with yours, but there seems to miss many modifications I did on the docstring. Does it mean that you don't agree with it ?
</li></ol><ol start="2"><li>Following 1, I think you should at least add an OUTPUT field, especially for the functions <code>edge_cut</code>, <code>vertex_cut</code>. It is important that the user knows what he's going to have returned when using your functions.
</li></ol><ol start="3"><li>The same comment about returning tuples instead of lists. I agree with you that this is minor, but I think there is a reason why the two data structures exist in Python. Tuples seem more immutable while lists are dynamical. Here, you return fixed things that shouldn't be modified.
</li></ol><ol start="4"><li>I insist on the point that the <code>vertices</code> parameter should be hidden. I think this is important... the signature of the function is a very important feature to understand what the function does.
</li></ol><p>
If you agree with that and since you've put a lot of work since the beginning, I have no problem at all to change all these by myself.
</p>
<p>
Another remark : when merging my changes, it's better to create another patch that applies on top of your changes and on mine at the same time. This way, one can visualize more easily what each of us did and when. This can very simply realized with mercurial. You only need to apply, say, the two first patches, and then create a new patch with <code>hg qnew</code> that applies on top of both the first patches.
</p>
<p>
So as soon as you tell me that I can make some changes, I'll do them, but I don't want to work for nothing, so I'll wait till you answer.
</p>
<p>
Note that I tested the new functions and I agree with what they do, everything works fine, it's just the documentation and some code choices that I want to discuss.
</p>
TicketncohenThu, 11 Mar 2010 16:55:20 GMT
https://trac.sagemath.org/ticket/7288#comment:18
https://trac.sagemath.org/ticket/7288#comment:18
<p>
Hem.... How can I say this ?....
</p>
<p>
I did not ignore your remarks... If I remember correctly, I addressed them all, including the documentation and your fixes... I just uploaded a wrong file, or did not generate the patch properly.... And I had the good idea to delete the branch containing the modifications since, which means I'm in for writing them again <sup></sup>;
</p>
<p>
I'm really sorry, you will have what you asked for as soon as possible.
</p>
<p>
Nathann
</p>
TicketncohenThu, 11 Mar 2010 16:55:26 GMTstatus changed
https://trac.sagemath.org/ticket/7288#comment:19
https://trac.sagemath.org/ticket/7288#comment:19
<ul>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>needs_work</em>
</li>
</ul>
TicketabmasseThu, 11 Mar 2010 19:23:05 GMT
https://trac.sagemath.org/ticket/7288#comment:20
https://trac.sagemath.org/ticket/7288#comment:20
<p>
Don't worry about that !
</p>
<p>
If I may suggest, maybe you could get back your initial patch and apply mine (which is still available on trac). Then you could only add the few doctests that you added to fix the failing tests.
</p>
TicketncohenFri, 12 Mar 2010 08:39:01 GMTstatus changed
https://trac.sagemath.org/ticket/7288#comment:21
https://trac.sagemath.org/ticket/7288#comment:21
<ul>
<li><strong>status</strong>
changed from <em>needs_work</em> to <em>needs_review</em>
</li>
</ul>
<p>
Hello !!!
</p>
<p>
Here is the patch I should have sent you last time... Actually, I did the job a bit better this time, as I replaced each occurence of the lists [p.add_constraint...] I could find in the code, so there should be none left :-)
</p>
<p>
It still fixes all doctest bugs, and it splits the gomory_hu function, and it includes your patch, and it should be fine, though as I told you over email I made a mistake when applying the patches and I can not give you, as you asked, a patch to apply on top of yours, but another patch with contains all of it.. :-/
</p>
<p>
I'll read hg's manual again, just to be sure ;-)
</p>
<p>
Nathan
</p>
TicketncohenFri, 12 Mar 2010 08:40:06 GMTattachment set
https://trac.sagemath.org/ticket/7288
https://trac.sagemath.org/ticket/7288
<ul>
<li><strong>attachment</strong>
set to <em>trac_7288.patch</em>
</li>
</ul>
TicketabmasseFri, 12 Mar 2010 23:28:17 GMTattachment set
https://trac.sagemath.org/ticket/7288
https://trac.sagemath.org/ticket/7288
<ul>
<li><strong>attachment</strong>
set to <em>trac_7288_review-abm.patch</em>
</li>
</ul>
<p>
Minor doc fixes -- apply on top of Nathann's patch
</p>
TicketabmasseFri, 12 Mar 2010 23:40:14 GMT
https://trac.sagemath.org/ticket/7288#comment:22
https://trac.sagemath.org/ticket/7288#comment:22
<p>
I reviewed the patch for what I expect will be the last time ;)
</p>
<p>
I did the following tests. First, I compiled from source two versions of sage-4.3.3. Then I installed CBC and GLPK on one of the versions (call this version the <code>optional</code> one) while not installing it on the other (call that one <code>basic</code>). Then, I applied the two patches of <a class="closed ticket" href="https://trac.sagemath.org/ticket/7311" title="defect: Improve the add_constraint method from MixedIntegerLinearProgram (closed: fixed)">#7311</a> on both versions and Nathann's patch for <a class="closed ticket" href="https://trac.sagemath.org/ticket/7288" title="enhancement: Gomory-Hu Trees (closed: fixed)">#7288</a>.
</p>
<p>
I tested all sage with the command <code>sage -testall</code> on the <code>basic</code> version. All tests passed. On the other hand, I tested both the <code>sage/numerical</code> and <code>sage/graphs</code> folders with the command <code>sage -t -optional</code>. Once again, all tests passed ! (I also had to install the package Nauty which is also needed for optional tests).
</p>
<p>
Finally, I made some minor changes, touching only the documentation and some comments in the code. I restested all and the results were the same. I also looked at the documentation generated by Sphinx. Everything seemed fine.
</p>
<p>
Note that other part of codes were also modified by Nathann's patch, but it only concerns doctests that were failing, so that the graph folder will be stable in Sage as soon as <a class="closed ticket" href="https://trac.sagemath.org/ticket/7311" title="defect: Improve the add_constraint method from MixedIntegerLinearProgram (closed: fixed)">#7311</a> and <a class="closed ticket" href="https://trac.sagemath.org/ticket/7288" title="enhancement: Gomory-Hu Trees (closed: fixed)">#7288</a> are merged ! (There were some optional tests failing even before applying any patch !!!)
</p>
<p>
To conclude, I give this ticket a positive review, as soon as Nathann confirms he agrees with my changes.
</p>
<p>
Great work !
</p>
TicketncohenSat, 13 Mar 2010 07:54:07 GMTstatus changed
https://trac.sagemath.org/ticket/7288#comment:23
https://trac.sagemath.org/ticket/7288#comment:23
<ul>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>positive_review</em>
</li>
</ul>
<p>
I see no reason to refuse any of them ! Thank you veeeeeery much for your help with this patch.. Not all of them can claim they have been so thoroughly tested :-)
</p>
<p>
Nathann
</p>
TicketjhpalmieriThu, 15 Apr 2010 05:58:32 GMTstatus changed; reviewer, resolution, merged, author set
https://trac.sagemath.org/ticket/7288#comment:24
https://trac.sagemath.org/ticket/7288#comment:24
<ul>
<li><strong>status</strong>
changed from <em>positive_review</em> to <em>closed</em>
</li>
<li><strong>reviewer</strong>
set to <em>Alexandre Blondin Massé</em>
</li>
<li><strong>resolution</strong>
set to <em>fixed</em>
</li>
<li><strong>merged</strong>
set to <em>sage-4.4.alpha0</em>
</li>
<li><strong>author</strong>
set to <em>Nathann Cohen</em>
</li>
</ul>
<p>
Merged in 4.4.alpha0:
</p>
<ul><li>trac_7288.patch
</li><li>trac_7288_review-abm.patch
</li></ul>
Ticket