Sage: Ticket #20311: interactive_simplex_method enhancements
https://trac.sagemath.org/ticket/20311
<p>
Allow constant terms in the objective, check solutions for feasibility and optimality, transformation map from standard form to the original one.
</p>
en-usSagehttps://trac.sagemath.org/chrome/site/logo_sagemath_trac.png
https://trac.sagemath.org/ticket/20311
Trac 1.1.6novoseltSun, 27 Mar 2016 23:33:42 GMTbranch set
https://trac.sagemath.org/ticket/20311#comment:1
https://trac.sagemath.org/ticket/20311#comment:1
<ul>
<li><strong>branch</strong>
set to <em>u/novoselt/ISM_enchancements</em>
</li>
</ul>
TicketnovoseltSun, 27 Mar 2016 23:34:34 GMTstatus changed; cc set; branch deleted
https://trac.sagemath.org/ticket/20311#comment:2
https://trac.sagemath.org/ticket/20311#comment:2
<ul>
<li><strong>cc</strong>
<em>mkoeppe</em> added
</li>
<li><strong>status</strong>
changed from <em>new</em> to <em>needs_review</em>
</li>
<li><strong>branch</strong>
<em>u/novoselt/ISM_enchancements</em> deleted
</li>
</ul>
TicketnovoseltSun, 27 Mar 2016 23:35:26 GMTcommit, branch set
https://trac.sagemath.org/ticket/20311#comment:3
https://trac.sagemath.org/ticket/20311#comment:3
<ul>
<li><strong>commit</strong>
set to <em>f2e52f8f613d423f83ee9806b23b3aacefae2156</em>
</li>
<li><strong>branch</strong>
set to <em>u/novoselt/ISM_enchancements</em>
</li>
</ul>
<p>
New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=62ddb03dc762d13a1d9c25d70f50b9105e88ea16"><span class="icon"></span>62ddb03</a></td><td><code>Pass arguments through InteractiveLPProblem.standard_form.</code>
</td></tr><tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=5777ef9f4df2c86dcbf2fb6ba547bfe8bb66def3"><span class="icon"></span>5777ef9</a></td><td><code>Allow objective constant terms for InteractiveLPProblem.</code>
</td></tr><tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=b5f5f91157169ba2896cf0661e9f06a338c684f9"><span class="icon"></span>b5f5f91</a></td><td><code>Infeasible problems are bounded!</code>
</td></tr><tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=5fd3547a340950044c73fe6130b6355f0b631325"><span class="icon"></span>5fd3547</a></td><td><code>Add checks for feasible/optimal solutions of InteractiveLPProblem</code>
</td></tr><tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=f2e52f8f613d423f83ee9806b23b3aacefae2156"><span class="icon"></span>f2e52f8</a></td><td><code>Return coordinate transformation for problems in standard form.</code>
</td></tr></table>
TicketmkoeppeSun, 27 Mar 2016 23:49:16 GMT
https://trac.sagemath.org/ticket/20311#comment:4
https://trac.sagemath.org/ticket/20311#comment:4
<p>
The standard-form transformation works well with <a class="closed ticket" href="https://trac.sagemath.org/ticket/20296" title="enhancement: MixedIntegerLinearProgram: New backend using InteractiveLPProblem (closed: fixed)">#20296</a>. Thanks very much! (I'll update the branch of <a class="closed ticket" href="https://trac.sagemath.org/ticket/20296" title="enhancement: MixedIntegerLinearProgram: New backend using InteractiveLPProblem (closed: fixed)">#20296</a> when this ticket is merged.)
</p>
<p>
Some issues:
</p>
<ul><li>I think the constant term should appear in the latex representation of the problem when nonzero.
</li></ul><ul><li>And it also needs to be passed through to <code>InteractiveLPProblemStandardForm</code> in <code>standard_form</code>. I have added a (failing) doctest.
</li></ul><ul><li>And then <code>InteractiveLPProblemStandardForm</code> needs to pass it on to the dictionaries...
</li></ul><ul><li>I think there should be a doctest that illustrates how the constant term interacts with <code>is_negative</code>.
</li></ul><ul><li>Passing <code>slack_variables</code> as a keyword argument to <code>standard_form</code> is a bit of an awkward interface, though, because <code>standard_form</code> may split equations and so the user would have to anticipate this. Perhaps it would be better to provide a list of "row_names" instead and modify that somehow when equations are split.
</li></ul>
TicketmkoeppeMon, 28 Mar 2016 01:58:17 GMTstatus changed
https://trac.sagemath.org/ticket/20311#comment:5
https://trac.sagemath.org/ticket/20311#comment:5
<ul>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>needs_work</em>
</li>
</ul>
TicketmkoeppeTue, 29 Mar 2016 04:33:08 GMTreviewer set
https://trac.sagemath.org/ticket/20311#comment:6
https://trac.sagemath.org/ticket/20311#comment:6
<ul>
<li><strong>reviewer</strong>
set to <em>Matthias Koeppe</em>
</li>
</ul>
TicketmkoeppeWed, 30 Mar 2016 03:56:46 GMTbranch changed
https://trac.sagemath.org/ticket/20311#comment:7
https://trac.sagemath.org/ticket/20311#comment:7
<ul>
<li><strong>branch</strong>
changed from <em>u/novoselt/ISM_enchancements</em> to <em>u/mkoeppe/ISM_enchancements</em>
</li>
</ul>
TicketnovoseltThu, 31 Mar 2016 01:50:15 GMTcommit changed
https://trac.sagemath.org/ticket/20311#comment:8
https://trac.sagemath.org/ticket/20311#comment:8
<ul>
<li><strong>commit</strong>
changed from <em>f2e52f8f613d423f83ee9806b23b3aacefae2156</em> to <em>ec31ed65e3624affa79298d2bb8d414600b85e47</em>
</li>
</ul>
<p>
I'll probably work on it next weekend. For the record - it is not a good idea to edit old comments as apparently there are no notifications sent about it and it was a bit of an accident that I looked up.
</p>
<p>
Also, bloody trac does not let me post reply comments for no reason, but:
</p>
<ul><li>I think problems should be typeset as <code>10 + max 5 x1 - 7 x2</code>, i.e. with constant term first and out of max/min as it makes it easier to "get rid of it" when desirable.
</li><li>I was not sure about the standard form, but probably it should include the constant term as well. And the dual problem has to be adjusted to make sure that optimal values still agree.
</li><li>For dictionaries convenient typesetting is probably in the objective as a part of its "name", as in <code>5 - z = 10 x1 + 9 x2</code>
</li><li>Interaction with negativity should also clearly documented.
</li><li>For "row_names" - I'd rather not introduce even more concepts and logic. If a user cares about slack names, he better know what they are and how they are formed. Also, if the only issue is the base name clash (without index), then the number of constraints does not matter, just pass that base name and indices will be taken care of.
</li></ul><hr />
<p>
New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=ec31ed65e3624affa79298d2bb8d414600b85e47"><span class="icon"></span>ec31ed6</a></td><td><code>InteractiveLPProblem.standard_form: Add doctest for objective_constant_term</code>
</td></tr></table>
TicketmkoeppeThu, 31 Mar 2016 01:53:22 GMT
https://trac.sagemath.org/ticket/20311#comment:9
https://trac.sagemath.org/ticket/20311#comment:9
<p>
Thanks! Sounds good.
</p>
TicketnovoseltSat, 02 Apr 2016 19:53:45 GMTbranch changed
https://trac.sagemath.org/ticket/20311#comment:10
https://trac.sagemath.org/ticket/20311#comment:10
<ul>
<li><strong>branch</strong>
changed from <em>u/mkoeppe/ISM_enchancements</em> to <em>u/novoselt/ISM_enchancements</em>
</li>
</ul>
TicketnovoseltSat, 02 Apr 2016 19:54:15 GMTstatus, commit changed
https://trac.sagemath.org/ticket/20311#comment:11
https://trac.sagemath.org/ticket/20311#comment:11
<ul>
<li><strong>status</strong>
changed from <em>needs_work</em> to <em>needs_review</em>
</li>
<li><strong>commit</strong>
changed from <em>ec31ed65e3624affa79298d2bb8d414600b85e47</em> to <em>992c5ea1d2bcab0898dac5751a850d5ec7c053f9</em>
</li>
</ul>
<p>
New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=992c5ea1d2bcab0898dac5751a850d5ec7c053f9"><span class="icon"></span>992c5ea</a></td><td><code>Typeset constant term and clarify negativity interaction.</code>
</td></tr></table>
TicketmkoeppeMon, 04 Apr 2016 04:05:45 GMTstatus changed
https://trac.sagemath.org/ticket/20311#comment:12
https://trac.sagemath.org/ticket/20311#comment:12
<ul>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>needs_work</em>
</li>
</ul>
<p>
I think the constant term also needs to be reflected in <code>run_simplex_method</code> and <code>run_revised_simplex_method</code>.
(Maybe the support for constant terms is a bit too complicated for the interactive simplex method after all?)
</p>
TicketnovoseltMon, 04 Apr 2016 04:24:30 GMT
https://trac.sagemath.org/ticket/20311#comment:13
https://trac.sagemath.org/ticket/20311#comment:13
<p>
Well, it definitely adds very little from the didactic point of view, mostly just annoying thing to remember ;-) But since we have started and for the sake of being able to convert other problems to this type let's finish the job. What exactly is the problem with the simplex method? My hope was that things will take care of themselves there but I guess they don't.
</p>
TicketmkoeppeMon, 04 Apr 2016 04:44:35 GMT
https://trac.sagemath.org/ticket/20311#comment:14
https://trac.sagemath.org/ticket/20311#comment:14
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/20311#comment:13" title="Comment 13">novoselt</a>:
</p>
<blockquote class="citation">
<p>
What exactly is the problem with the simplex method? My hope was that things will take care of themselves there but I guess they don't.
</p>
</blockquote>
<p>
It prints the non-shifted objective value.
I suppose things would take care of themselves if the objective constant term were put in the constant (on the right hand side) of the dictionary, rather than into the objective name.
</p>
TicketnovoseltMon, 04 Apr 2016 04:57:22 GMT
https://trac.sagemath.org/ticket/20311#comment:15
https://trac.sagemath.org/ticket/20311#comment:15
<p>
That will complicate alignment for typesetting and in general it seemed fitting to put it on the left where the negative sign goes as well for minimization problems. I'll think some more about it.
</p>
TicketmkoeppeMon, 04 Apr 2016 05:33:59 GMT
https://trac.sagemath.org/ticket/20311#comment:16
https://trac.sagemath.org/ticket/20311#comment:16
<p>
Well, the dictionary already typesets a constant for the objective function -- that's the value of the dictionary.
There's no need to distinguish these two constants from each other -- it's quite natural; the simplex method manipulates a dictionary of affine-linear functions.
</p>
TicketnovoseltTue, 05 Apr 2016 15:36:58 GMT
https://trac.sagemath.org/ticket/20311#comment:17
https://trac.sagemath.org/ticket/20311#comment:17
<p>
You are right of course, and this will eliminate different meanings for <code>objective_value</code>. Although it would be better then to typeset objective with constant inside of min/max, which is probably more natural anyway.
</p>
TicketmkoeppeTue, 05 Apr 2016 21:35:07 GMT
https://trac.sagemath.org/ticket/20311#comment:18
https://trac.sagemath.org/ticket/20311#comment:18
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/20311#comment:17" title="Comment 17">novoselt</a>:
</p>
<blockquote class="citation">
<blockquote>
<p>
Although it would be better then to typeset objective with constant inside of min/max, which is probably more natural anyway.
</p>
</blockquote>
</blockquote>
<p>
I agree.
</p>
TicketgitSun, 10 Apr 2016 16:47:31 GMTcommit changed
https://trac.sagemath.org/ticket/20311#comment:19
https://trac.sagemath.org/ticket/20311#comment:19
<ul>
<li><strong>commit</strong>
changed from <em>992c5ea1d2bcab0898dac5751a850d5ec7c053f9</em> to <em>580b57f5af4ec143c031eae2926cb8b83333b13f</em>
</li>
</ul>
<p>
Branch pushed to git repo; I updated commit sha1. New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=580b57f5af4ec143c031eae2926cb8b83333b13f"><span class="icon"></span>580b57f</a></td><td><code>Merge 7.2.beta3 into t/20311/ISM_enchancements</code>
</td></tr></table>
TicketgitSun, 10 Apr 2016 21:30:36 GMTcommit changed
https://trac.sagemath.org/ticket/20311#comment:20
https://trac.sagemath.org/ticket/20311#comment:20
<ul>
<li><strong>commit</strong>
changed from <em>580b57f5af4ec143c031eae2926cb8b83333b13f</em> to <em>4d7afcab44af70dfa5063624d02c1b8ddd2b2b64</em>
</li>
</ul>
<p>
Branch pushed to git repo; I updated commit sha1. New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=4d7afcab44af70dfa5063624d02c1b8ddd2b2b64"><span class="icon"></span>4d7afca</a></td><td><code>Fixes to the objective constant term treatment.</code>
</td></tr></table>
TicketnovoseltSun, 10 Apr 2016 21:35:24 GMTstatus changed
https://trac.sagemath.org/ticket/20311#comment:21
https://trac.sagemath.org/ticket/20311#comment:21
<ul>
<li><strong>status</strong>
changed from <em>needs_work</em> to <em>needs_review</em>
</li>
</ul>
<p>
OK, how about this one? I've also renamed <code>value(x)</code> to <code>objective_value(x)</code> to be more clear.
</p>
TicketmkoeppeSun, 10 Apr 2016 22:27:08 GMT
https://trac.sagemath.org/ticket/20311#comment:22
https://trac.sagemath.org/ticket/20311#comment:22
<p>
I think it would be better to keep the notions of [in]feasible problem and [in]feasible solution separate.
Don't overload <code>is_feasible</code> with both meanings. Better have a new method <code>is_solution_feasible</code> and likewise rename <code>is_optimal</code> to <code>is_solution_optimal</code>.
</p>
TicketmkoeppeSun, 10 Apr 2016 22:31:53 GMT
https://trac.sagemath.org/ticket/20311#comment:23
https://trac.sagemath.org/ticket/20311#comment:23
<pre class="wiki">@@ -1914,6 +2134,7 @@ class InteractiveLPProblemStandardForm(InteractiveLPProblem):
A = A.matrix_from_columns(range(k) + range(k + 1, n))
b = copy(b)
c = vector(self.base_ring(), n - 1)
+ v = self._constant_term
for cj, xj in zip(*self.Abcx()[-2:]):
if xj in N:
c[N.index(xj)] += cj
</pre><p>
This <code>v</code> doesn't seem to get used
</p>
TicketnovoseltSun, 10 Apr 2016 22:34:35 GMT
https://trac.sagemath.org/ticket/20311#comment:24
https://trac.sagemath.org/ticket/20311#comment:24
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/20311#comment:22" title="Comment 22">mkoeppe</a>:
</p>
<blockquote class="citation">
<p>
I think it would be better to keep the notions of [in]feasible problem and [in]feasible solution separate.
Don't overload <code>is_feasible</code> with both meanings. Better have a new method <code>is_solution_feasible</code> and likewise rename <code>is_optimal</code> to <code>is_solution_optimal</code>.
</p>
</blockquote>
<p>
No confusion is possible in use and I planned to do it for a long time without any second thoughts - several students have actually asked for exactly this ;-)
</p>
TicketnovoseltSun, 10 Apr 2016 22:36:11 GMT
https://trac.sagemath.org/ticket/20311#comment:25
https://trac.sagemath.org/ticket/20311#comment:25
<p>
<code>v</code> propagates to the dictionary constructor. It happened to be initialized with 0 before.
</p>
TicketmkoeppeSun, 10 Apr 2016 22:37:13 GMT
https://trac.sagemath.org/ticket/20311#comment:26
https://trac.sagemath.org/ticket/20311#comment:26
<p>
In my experience, the persistent confusion of students about the notions of feasible problems, feasible solutions, and feasible dictionaries is the number 1 frustration in teaching the simplex method
</p>
TicketnovoseltSun, 10 Apr 2016 22:37:55 GMT
https://trac.sagemath.org/ticket/20311#comment:27
https://trac.sagemath.org/ticket/20311#comment:27
<p>
If you are looking at commits in a browser, there is a handy selector in top-right for the number of context lines, which allows to see such changes in context.
</p>
TicketmkoeppeSun, 10 Apr 2016 22:38:39 GMT
https://trac.sagemath.org/ticket/20311#comment:28
https://trac.sagemath.org/ticket/20311#comment:28
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/20311#comment:27" title="Comment 27">novoselt</a>:
</p>
<blockquote class="citation">
<p>
If you are looking at commits in a browser, there is a handy selector in top-right for the number of context lines, which allows to see such changes in context.
</p>
</blockquote>
<p>
Thanks! Yes, I was only reading the diff at this point
</p>
TicketnovoseltSun, 10 Apr 2016 22:46:02 GMT
https://trac.sagemath.org/ticket/20311#comment:29
https://trac.sagemath.org/ticket/20311#comment:29
<p>
Agreed about confusion, but the questions in human language are:
</p>
<p>
A) Is this problem feasible?
B) Is this solution for this problem feasible?
</p>
<p>
which I want to translate in code to
</p>
<p>
A) <code>problem.is_feasible()</code>
B) <code>problem.is_feasible(solution)</code>
</p>
<p>
and find very natural and not <strong>adding</strong> any confusion at all.
</p>
<p>
Most students also feel no difference between
</p>
<p>
C) <code>problem.optimal_value()</code>
D) <code>optimal_dictionary.objective_value()</code>
</p>
<p>
since they do give the same values. Yet
</p>
<p>
C') <code>problem.work_hard_to_find_optimal_value()</code>
D') <code>optimal_dictionary.just_read_off_the_objective_value_you_store()</code>
</p>
<p>
are not the right way to teach them the difference.
</p>
TicketmkoeppeSun, 10 Apr 2016 22:59:18 GMT
https://trac.sagemath.org/ticket/20311#comment:30
https://trac.sagemath.org/ticket/20311#comment:30
<p>
I think my concern regarding A and B is in part because of Python defaulting semantics.
If the <code>solution</code> argument is missing, people could assume that <code>is_feasible</code> somehow talks about the feasibility of some "default" solution (perhaps some "current" solution).
</p>
<p>
I don't have a concern regarding the naming of C and D in the code.
</p>
TicketnovoseltSun, 10 Apr 2016 23:05:27 GMT
https://trac.sagemath.org/ticket/20311#comment:31
https://trac.sagemath.org/ticket/20311#comment:31
<p>
What is default/current solution for a problem???
</p>
<p>
My point with C and D was that it is again just direct translation of "the human language" into code with neither solves nor adds confusion.
</p>
<p>
How about going with the current addition and seeing how (and with what degree of confusion) it will be received? Overloading methods is a common practice and we can always deprecate the use of arguments if it turns out to be bad.
</p>
TicketmkoeppeSun, 10 Apr 2016 23:22:33 GMT
https://trac.sagemath.org/ticket/20311#comment:32
https://trac.sagemath.org/ticket/20311#comment:32
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/20311#comment:31" title="Comment 31">novoselt</a>:
</p>
<blockquote class="citation">
<p>
What is default/current solution for a problem???
</p>
</blockquote>
<p>
Well, *I* know that in your design the problem is immutable, but a user might think that if he goes pivoting in "the" dictionary obtained from <code>initial_dictionary</code>, this has some effect on the problem.
</p>
<blockquote class="citation">
<p>
How about going with the current addition and seeing how (and with what degree of confusion) it will be received? Overloading methods is a common practice and we can always deprecate the use of arguments if it turns out to be bad.
</p>
</blockquote>
<p>
OK, fine.
</p>
TicketmkoeppeMon, 11 Apr 2016 00:22:46 GMT
https://trac.sagemath.org/ticket/20311#comment:33
https://trac.sagemath.org/ticket/20311#comment:33
<p>
It seems the constant terms don't work the right way for minimization problems. Probably in the <code>standard_form</code> method the sign needs to be flipped.
(I have a test for this in InteractiveLPBackend.)
</p>
TicketmkoeppeMon, 11 Apr 2016 00:36:27 GMT
https://trac.sagemath.org/ticket/20311#comment:34
https://trac.sagemath.org/ticket/20311#comment:34
<p>
See <a class="closed ticket" href="https://trac.sagemath.org/ticket/20413" title="enhancement: InteractiveLPBackend: Use standard-form transformation, ... (closed: fixed)">#20413</a>.
</p>
TicketmkoeppeMon, 11 Apr 2016 00:51:51 GMTbranch changed
https://trac.sagemath.org/ticket/20311#comment:35
https://trac.sagemath.org/ticket/20311#comment:35
<ul>
<li><strong>branch</strong>
changed from <em>u/novoselt/ISM_enchancements</em> to <em>u/mkoeppe/ISM_enchancements</em>
</li>
</ul>
TicketmkoeppeMon, 11 Apr 2016 00:52:16 GMTcommit changed
https://trac.sagemath.org/ticket/20311#comment:36
https://trac.sagemath.org/ticket/20311#comment:36
<ul>
<li><strong>commit</strong>
changed from <em>4d7afcab44af70dfa5063624d02c1b8ddd2b2b64</em> to <em>78d0e784dfd4bb497c1b179f8fa8f645d334fdaa</em>
</li>
</ul>
<p>
I have added a testcase.
</p>
<hr />
<p>
New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=78d0e784dfd4bb497c1b179f8fa8f645d334fdaa"><span class="icon"></span>78d0e78</a></td><td><code>InteractiveLPProblem.standard_form: Add doctest for minimization with objective_constant_term</code>
</td></tr></table>
TicketnovoseltMon, 11 Apr 2016 02:44:07 GMTbranch changed
https://trac.sagemath.org/ticket/20311#comment:37
https://trac.sagemath.org/ticket/20311#comment:37
<ul>
<li><strong>branch</strong>
changed from <em>u/mkoeppe/ISM_enchancements</em> to <em>u/novoselt/ISM_enchancements</em>
</li>
</ul>
TicketnovoseltMon, 11 Apr 2016 02:46:08 GMTcommit changed
https://trac.sagemath.org/ticket/20311#comment:38
https://trac.sagemath.org/ticket/20311#comment:38
<ul>
<li><strong>commit</strong>
changed from <em>78d0e784dfd4bb497c1b179f8fa8f645d334fdaa</em> to <em>7145f7d14ada975e9025efddb5852af6fa79eed8</em>
</li>
</ul>
<p>
Yes, of course - thanks for thorough testing!
</p>
<hr />
<p>
New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="http://git.sagemath.org/sage.git/commit/?id=7145f7d14ada975e9025efddb5852af6fa79eed8"><span class="icon"></span>7145f7d</a></td><td><code>Flip the constant term sign when converting min problems to standard form.</code>
</td></tr></table>
TicketmkoeppeMon, 11 Apr 2016 02:55:11 GMTstatus changed; keywords set
https://trac.sagemath.org/ticket/20311#comment:39
https://trac.sagemath.org/ticket/20311#comment:39
<ul>
<li><strong>keywords</strong>
<em>lp</em> added
</li>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>positive_review</em>
</li>
</ul>
<p>
Thanks a lot for your work on this ticket!
</p>
TicketvbraunTue, 12 Apr 2016 16:30:38 GMTstatus, branch changed; resolution set
https://trac.sagemath.org/ticket/20311#comment:40
https://trac.sagemath.org/ticket/20311#comment:40
<ul>
<li><strong>status</strong>
changed from <em>positive_review</em> to <em>closed</em>
</li>
<li><strong>resolution</strong>
set to <em>fixed</em>
</li>
<li><strong>branch</strong>
changed from <em>u/novoselt/ISM_enchancements</em> to <em>7145f7d14ada975e9025efddb5852af6fa79eed8</em>
</li>
</ul>
Ticket