Sage: Ticket #29954: Unstable plotting
https://trac.sagemath.org/ticket/29954
<p>
<a class="closed ticket" href="https://trac.sagemath.org/ticket/29935" title="enhancement: implicitly fuzz RNG-dependent doctests with a random random seed (closed: fixed)">#29935</a> discovered unstable plotting with doctests. This causes the following failures:
</p>
<pre class="wiki">sage -t --long --random-seed=319106504607147180164974137764334084020 src/doc/en/prep/Symbolics-and-Basic-Plotting.rst # 2 doctests failed
sage -t --long --random-seed=319106504607147180164974137764334084020 src/doc/en/prep/Calculus.rst # 1 doctest failed
sage -t --long --random-seed=319106504607147180164974137764334084020 src/doc/en/thematic_tutorials/tutorial-notebook-and-help-long.rst # 1 doctest failed
sage -t --long --random-seed=319106504607147180164974137764334084020 src/doc/en/prep/Programming.rst # 1 doctest failed
sage -t --long --warn-long 85.2 --random-seed=123134235245245234 src/sage/combinat/sine_gordon.py # 1 doctest failed
</pre><p>
In all of those instances, primitives where split into two (with a hole).
</p>
<p>
To reproduce
</p>
<pre class="wiki">sage: f(x)=x^3+1
sage: set_random_seed(319106504607147180164974137764334084020)
sage: plot(1,(x,-1,1),color="red", linestyle="--")
Launched png viewer for Graphics object consisting of 1 graphics primitive
sage: plot(1,(x,-1,1),color="red", linestyle="--")
Launched png viewer for Graphics object consisting of 1 graphics primitive
sage: plot(1,(x,-1,1),color="red", linestyle="--")
Launched png viewer for Graphics object consisting of 2 graphics primitives
</pre><pre class="wiki">sage: set_random_seed(319106504607147180164974137764334084020)
sage: plot(cos(x),(x,0,pi/2),fill=True,ticks=[[0,pi/4,pi/2],None],tick_formatter=pi)
Launched png viewer for Graphics object consisting of 2 graphics primitives
sage: plot(cos(x),(x,0,pi/2),fill=True,ticks=[[0,pi/4,pi/2],None],tick_formatter=pi)
Launched png viewer for Graphics object consisting of 2 graphics primitives
sage: plot(cos(x),(x,0,pi/2),fill=True,ticks=[[0,pi/4,pi/2],None],tick_formatter=pi)
Launched png viewer for Graphics object consisting of 3 graphics primitives
</pre><pre class="wiki">sage: set_random_seed(319106504607147180164974137764334084020)
sage: plot(sin(x), (x,0,2*pi))
Launched png viewer for Graphics object consisting of 1 graphics primitive
sage: plot(sin(x), (x,0,2*pi))
Launched png viewer for Graphics object consisting of 1 graphics primitive
sage: plot(sin(x), (x,0,2*pi))
Launched png viewer for Graphics object consisting of 2 graphics primitives
</pre><pre class="wiki">sage: set_random_seed(319106504607147180164974137764334084020)
sage: plot([x^n for n in [2..6]],(x,0,1))
Launched png viewer for Graphics object consisting of 6 graphics primitives
sage: plot([x^n for n in [2..6]],(x,0,1))
Launched png viewer for Graphics object consisting of 5 graphics primitives
</pre><pre class="wiki">sage: set_random_seed(123134235245245234)
sage: Y = SineGordonYsystem('A',(6,4,3))
sage: Y.plot()
Launched png viewer for Graphics object consisting of 220 graphics primitives
sage: Y.plot()
Launched png viewer for Graphics object consisting of 221 graphics primitives
sage: Y.plot()
Launched png viewer for Graphics object consisting of 221 graphics primitives
sage: Y.plot()
Launched png viewer for Graphics object consisting of 219 graphics primitives
</pre><p>
This is caused by <a class="closed ticket" href="https://trac.sagemath.org/ticket/13246" title="defect: Automatic exclusion of non-domain points in things like arcsec (closed: fixed)">#13246</a>, which adds exclusion points in the plot, whenever two x-values are far apart. However, it seems more natural to actually keep track of those points where the computation failed.
</p>
en-usSagehttps://trac.sagemath.org/chrome/site/logo_sagemath_trac.png
https://trac.sagemath.org/ticket/29954
Trac 1.1.6gh-kliemTue, 21 Jul 2020 07:28:00 GMTdescription changed
https://trac.sagemath.org/ticket/29954#comment:1
https://trac.sagemath.org/ticket/29954#comment:1
<ul>
<li><strong>description</strong>
modified (<a href="/ticket/29954?action=diff&version=1">diff</a>)
</li>
</ul>
TicketmkoeppeFri, 24 Jul 2020 18:53:11 GMT
https://trac.sagemath.org/ticket/29954#comment:2
https://trac.sagemath.org/ticket/29954#comment:2
<p>
Replying to <a class="closed ticket" href="https://trac.sagemath.org/ticket/29954" title="defect: Unstable plotting (closed: fixed)">gh-kliem</a>:
</p>
<blockquote class="citation">
<p>
In all of those instances, primitives where split into two (with a hole).
</p>
</blockquote>
<p>
I think I have seen such sporadic plotting errors in the wild.
</p>
Ticketgh-kliemFri, 24 Jul 2020 19:25:05 GMT
https://trac.sagemath.org/ticket/29954#comment:3
https://trac.sagemath.org/ticket/29954#comment:3
<p>
It's not like I tried many random seeds.
</p>
<p>
For the first one, your chance is about 99 percent to get it right. The more complicated your object, the lower the chance obviously. For the last object, it appears to be about 64 percent. Of course, it is much harder to see the mistake there.
</p>
Ticketgh-kliemFri, 18 Sep 2020 19:32:57 GMT
https://trac.sagemath.org/ticket/29954#comment:4
https://trac.sagemath.org/ticket/29954#comment:4
<p>
One more
</p>
<pre class="wiki">sage -t --long --random-seed=1231241241243 src/sage/plot/plot.py
**********************************************************************
File "src/sage/plot/plot.py", line 321, in sage.plot.plot
Failed example:
print(p1 + p2)
Expected:
Graphics object consisting of 2 graphics primitives
Got:
Graphics object consisting of 3 graphics primitives
**********************************************************************
File "src/sage/plot/plot.py", line 323, in sage.plot.plot
Failed example:
p1 + p2 # display it
Expected:
Graphics object consisting of 2 graphics primitives
Got:
Graphics object consisting of 3 graphics primitives
**********************************************************************
File "src/sage/plot/plot.py", line 1620, in sage.plot.plot.plot
Failed example:
plot([b(n) for n in [1..5]], 0, 20, fill='axis')
Expected:
Graphics object consisting of 10 graphics primitives
Got:
Graphics object consisting of 11 graphics primitives
**********************************************************************
File "src/sage/plot/plot.py", line 2756, in sage.plot.plot.polar_plot
Failed example:
polar_plot([(1.2+k*0.2)*log(x) for k in range(6)], 1, 3 * pi, fill={0: [1], 2: [3], 4: [5]})
Expected:
Graphics object consisting of 9 graphics primitives
Got:
Graphics object consisting of 10 graphics primitives
</pre>
Ticketgh-kliemFri, 18 Sep 2020 19:36:18 GMT
https://trac.sagemath.org/ticket/29954#comment:5
https://trac.sagemath.org/ticket/29954#comment:5
<p>
And more
</p>
<pre class="wiki">sage -t --long --random-seed=319106504607147180164974137764334084020 src/sage/plot/colors.py
**********************************************************************
File "src/sage/plot/colors.py", line 1166, in sage.plot.colors.hue
Failed example:
p
Expected:
Graphics object consisting of 20 graphics primitives
Got:
Graphics object consisting of 21 graphics primitives
**********************************************************************
</pre><pre class="wiki">sage -t --long --random-seed=319106504607147180164974137764334084020 src/sage/plot/plot.py
**********************************************************************
File "src/sage/plot/plot.py", line 1086, in sage.plot.plot.plot
Failed example:
plot(sin, 0, 10, color='purple')
Expected:
Graphics object consisting of 1 graphics primitive
Got:
Graphics object consisting of 2 graphics primitives
**********************************************************************
File "src/sage/plot/plot.py", line 2053, in sage.plot.plot.?
Failed example:
p1+p2
Expected:
Graphics object consisting of 2 graphics primitives
Got:
Graphics object consisting of 3 graphics primitives
**********************************************************************
File "src/sage/plot/plot.py", line 2512, in sage.plot.plot.parametric_plot
Failed example:
parametric_plot((1, t), (t, 0, 4))
Expected:
Graphics object consisting of 1 graphics primitive
Got:
Graphics object consisting of 2 graphics primitives
**********************************************************************
File "src/sage/plot/plot.py", line 3155, in sage.plot.plot.plot_semilogx
Failed example:
plot_semilogx(20*log(abs(f), 10), (s, 1, 1e6))
Expected:
Graphics object consisting of 1 graphics primitive
Got:
Graphics object consisting of 2 graphics primitives
**********************************************************************
</pre>
Ticketgh-kliemFri, 18 Sep 2020 19:38:40 GMT
https://trac.sagemath.org/ticket/29954#comment:6
https://trac.sagemath.org/ticket/29954#comment:6
<pre class="wiki">sage -t --long --random-seed=123134235245245234 src/sage/plot/plot.py
**********************************************************************
File "src/sage/plot/plot.py", line 1931, in sage.plot.plot.plot
Failed example:
plot(x, x, 0, 1, legend_label=label)
Expected:
Graphics object consisting of 1 graphics primitive
Got:
Graphics object consisting of 2 graphics primitives
**********************************************************************
</pre>
Ticketgh-kliemFri, 18 Sep 2020 19:41:48 GMTattachment set
https://trac.sagemath.org/ticket/29954
https://trac.sagemath.org/ticket/29954
<ul>
<li><strong>attachment</strong>
set to <em>tmp_768r4405.png</em>
</li>
</ul>
<p>
It's not like you wouldn't see it.
</p>
Ticketgh-kliemFri, 18 Sep 2020 19:47:27 GMTpriority changed
https://trac.sagemath.org/ticket/29954#comment:7
https://trac.sagemath.org/ticket/29954#comment:7
<ul>
<li><strong>priority</strong>
changed from <em>major</em> to <em>critical</em>
</li>
</ul>
<p>
I'm moving this up to critical, because there is a total of 1354 doctests while they are pretty unstable.
</p>
TicketmkoeppeSat, 24 Oct 2020 20:15:01 GMTmilestone changed
https://trac.sagemath.org/ticket/29954#comment:8
https://trac.sagemath.org/ticket/29954#comment:8
<ul>
<li><strong>milestone</strong>
changed from <em>sage-9.2</em> to <em>sage-9.3</em>
</li>
</ul>
Ticketgh-DaveWitteMorrisSat, 19 Dec 2020 23:45:47 GMTbranch set
https://trac.sagemath.org/ticket/29954#comment:9
https://trac.sagemath.org/ticket/29954#comment:9
<ul>
<li><strong>branch</strong>
set to <em>public/29954</em>
</li>
</ul>
Ticketgh-DaveWitteMorrisSat, 19 Dec 2020 23:47:20 GMTcommit set
https://trac.sagemath.org/ticket/29954#comment:10
https://trac.sagemath.org/ticket/29954#comment:10
<ul>
<li><strong>commit</strong>
set to <em>7c9ab8fa15389239a9b10998c5d658c422ceecb7</em>
</li>
</ul>
<p>
I think this will be easy to fix. In fact, this PR may solve the problem, but I think we should do something more intelligent.
</p>
<p>
The problem is a bug in the adaptive graphing code. It assumes that if two consecutive plot points <code>a</code> and <code>b</code> are more than twice as far apart as the average distance between consecutive plot points, then there is a problem and we should not plot anything between <code>a</code> and <code>b</code>. However, the distance between consecutive plot points will be very large in any region where the graph is close to being linear, so the algorithm can erroneously add gaps to the graph in those regions.
</p>
<p>
This PR just changes "twice as far apart" to "five times as far apart". It seems to fix all of the examples listed above. But it should be easy to write a more intelligent patch that only puts gaps in regions where there is a problem evaluating the function.
</p>
<hr />
<p>
New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit?id=7c9ab8fa15389239a9b10998c5d658c422ceecb7"><span class="icon"></span>7c9ab8f</a></td><td><code>trac 29954 graph gap times 5</code>
</td></tr></table>
Ticketgh-DaveWitteMorrisSun, 20 Dec 2020 01:31:46 GMT
https://trac.sagemath.org/ticket/29954#comment:11
https://trac.sagemath.org/ticket/29954#comment:11
<p>
The ticket that introduced this part of the code is <a class="closed ticket" href="https://trac.sagemath.org/ticket/13246" title="defect: Automatic exclusion of non-domain points in things like arcsec (closed: fixed)">#13246</a> (merged in 6.3). The discussion on that ticket mentions the need for speed, so, although I think we do want to be more intelligent, perhaps we will decide to also offer a simple patch like this one (just changing "twice" to some other number) as an option (or maybe even as the default).
</p>
Ticketgh-kliemMon, 21 Dec 2020 11:09:17 GMT
https://trac.sagemath.org/ticket/29954#comment:12
https://trac.sagemath.org/ticket/29954#comment:12
<p>
Thanks for figuring out the problem.
</p>
<p>
The whole fix in <a class="closed ticket" href="https://trac.sagemath.org/ticket/13246" title="defect: Automatic exclusion of non-domain points in things like arcsec (closed: fixed)">#13246</a> seems strange to me and needs serious reworking:
</p>
<pre class="wiki">plot(1/(x+1), -3, 1, plot_points=500)
</pre><pre class="wiki">plot(tan(x), -3, 3)
</pre><p>
This is awful and <code>-infinity</code> and <code>+infinity</code> should never be connected. Here the <code>y-value</code> is too far apart to connect it and this isn't checked at all.
</p>
<p>
I don't like the approach done in <a class="closed ticket" href="https://trac.sagemath.org/ticket/13246" title="defect: Automatic exclusion of non-domain points in things like arcsec (closed: fixed)">#13246</a> for the following reasons:
</p>
<p>
<code>adaptive_refinement</code> distinguishes between not returning anything, because the <code>y-values</code> are close enough together and not returning anything because either recursion depth was exceeded or there was a computation error. Also <code>generate_plot_points</code> collects the exception indices.
</p>
<p>
However, none of this already collected information is returned by <code>generate_plot_points</code> and we completely start over trying to guess, where to add exclusion points. I mean <code>generate_plot_points</code> and <code>adaptive_refinement</code> have already figured out, where the those things should be.
</p>
<p>
As you mentioned above, in our case <code>adaptive_refinement</code> just doesn't refine, because this thing is close to linear and thus <code>adaptive_refinement</code> thinks things are fine. We should use this information and not discard it.
</p>
<p>
It think this will also fix the errornous connection made above.
</p>
Ticketgh-kliemMon, 21 Dec 2020 15:53:33 GMTbranch changed; commit deleted
https://trac.sagemath.org/ticket/29954#comment:13
https://trac.sagemath.org/ticket/29954#comment:13
<ul>
<li><strong>commit</strong>
<em>7c9ab8fa15389239a9b10998c5d658c422ceecb7</em> deleted
</li>
<li><strong>branch</strong>
changed from <em>public/29954</em> to <em>-remove-failures-of-adaptive-recursionpublic/29954-</em>
</li>
</ul>
<p>
Actually, <code>adaptive_refinement</code> fails quite a lot. I think this is, because it takes the absolute error instead of a relative one.
</p>
<p>
But, I don't think its okay to just connect things were <code>adaptive_refinement</code> fails, this is a really bad default in my opinion.
</p>
<pre class="wiki">sage: f(x) = (floor(x)+0.5) / (1-(x-0.5)^2)
sage: plot(f, (x, -3.5, 3.5), ymin=-5, ymax=5)
Launched png viewer for Graphics object consisting of 1 graphics primitive
</pre><p>
This thing isn't continuous and the only way to fix it, is to manually enter the points to exclude. However, the current code does a pretty good job in detecting those places, we just currently ignore everything that was obtained.
</p>
Ticketgh-kliemMon, 21 Dec 2020 16:25:32 GMTbranch changed
https://trac.sagemath.org/ticket/29954#comment:14
https://trac.sagemath.org/ticket/29954#comment:14
<ul>
<li><strong>branch</strong>
changed from <em>-remove-failures-of-adaptive-recursionpublic/29954-</em> to <em>public/29954-remove-failures-of-adaptive-recursionpublic/29954-</em>
</li>
</ul>
Ticketgh-kliemMon, 21 Dec 2020 16:26:24 GMTbranch changed; commit set
https://trac.sagemath.org/ticket/29954#comment:15
https://trac.sagemath.org/ticket/29954#comment:15
<ul>
<li><strong>commit</strong>
set to <em>67df47d01a882230cbecdbcd7f5252e95296c335</em>
</li>
<li><strong>branch</strong>
changed from <em>public/29954-remove-failures-of-adaptive-recursionpublic/29954-</em> to <em>public/29954-remove-failures-of-adaptive-recursion</em>
</li>
</ul>
<p>
New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit?id=67df47d01a882230cbecdbcd7f5252e95296c335"><span class="icon"></span>67df47d</a></td><td><code>do not connect plots when adaptive recursion failed</code>
</td></tr></table>
Ticketgh-kliemMon, 21 Dec 2020 16:27:10 GMT
https://trac.sagemath.org/ticket/29954#comment:16
https://trac.sagemath.org/ticket/29954#comment:16
<p>
But we could also just fix this bug here by changing from 2 times to 5 times as you suggested and move the other stuff to a seperate ticket, because in a way, it is a seperate issue.
</p>
Ticketgh-DaveWitteMorrisWed, 23 Dec 2020 01:25:33 GMT
https://trac.sagemath.org/ticket/29954#comment:17
https://trac.sagemath.org/ticket/29954#comment:17
<p>
I did not look at the details yet, but I fully agree that the approach in this PR is the correct direction: we should keep track of the unplottable points, and use those to determine the gaps in the graph. It is much better than changing 2 times to 5 times, which does not actually solve the problem (just makes it less common). When you set this ticket to "needs review", I will look at it more carefully.
</p>
<p>
Let's get this PR merged, and open a separate ticket for additional improvements to the adaptive refinement. (I consider the issue in <a class="ticket" href="https://trac.sagemath.org/ticket/29954#comment:12" title="Comment 12">comment:12</a> to be a separate issue, unless this PR already fixes the problem as a side-effect.)
</p>
Ticketgh-kliemThu, 24 Dec 2020 11:01:06 GMTstatus, commit, description, branch changed; author set
https://trac.sagemath.org/ticket/29954#comment:18
https://trac.sagemath.org/ticket/29954#comment:18
<ul>
<li><strong>status</strong>
changed from <em>new</em> to <em>needs_review</em>
</li>
<li><strong>commit</strong>
changed from <em>67df47d01a882230cbecdbcd7f5252e95296c335</em> to <em>5260baf0ac89244f4883c1cca87f7be7b8a1a2ae</em>
</li>
<li><strong>description</strong>
modified (<a href="/ticket/29954?action=diff&version=18">diff</a>)
</li>
<li><strong>branch</strong>
changed from <em>public/29954-remove-failures-of-adaptive-recursion</em> to <em>public/29954-only-fix-bug</em>
</li>
<li><strong>author</strong>
set to <em>Jonathan Kliem</em>
</li>
</ul>
<p>
New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit?id=f082fac38e68e6b056a0a07c3a397bab72f24cde"><span class="icon"></span>f082fac</a></td><td><code>fix unstable plotting by keeping track of non-defined points</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit?id=5260baf0ac89244f4883c1cca87f7be7b8a1a2ae"><span class="icon"></span>5260baf</a></td><td><code>documentation</code>
</td></tr></table>
Ticketgh-kliemThu, 24 Dec 2020 11:02:56 GMT
https://trac.sagemath.org/ticket/29954#comment:19
https://trac.sagemath.org/ticket/29954#comment:19
<p>
I think I seperated the bug fix from the behavior change.
</p>
Ticketgh-DaveWitteMorrisSun, 03 Jan 2021 06:32:41 GMTstatus changed; reviewer set
https://trac.sagemath.org/ticket/29954#comment:20
https://trac.sagemath.org/ticket/29954#comment:20
<ul>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>needs_work</em>
</li>
<li><strong>reviewer</strong>
set to <em>Dave Morris</em>
</li>
</ul>
<p>
Thanks, this is excellent! I do have a few minor suggestions, though:
</p>
<p>
Would it be better to make <code>excluded</code> a keyword-only argument? (By changing <code>excluded=False</code> to <code>*, excluded=False</code> in the definitions of <code>adaptive_refinement</code> and <code>generate_plot_points</code>.)
</p>
<p>
These two lines (the definitions of <code>adaptive_refinement</code> and <code>generate_plot_points</code>) are excessively long, so please add a line break before the 80th character.
</p>
<p>
In the docstring of <code>adaptive_refinement</code>, the description of <code>excluded</code> in the "INPUT" section makes it sound like two lists will be returned ("add a list of discovered points"). So I think it would be better to say something like: "also return locations where it has been discovered that the function is not defined". (Or "locations where" could be changed to "x-values at which".)
</p>
<p>
The term "point" usually refers to an ordered pair <code>(x,y)</code> in the documentation of this file, so it is confusing when it is used to refer to a value of x. Therefore, in the description of <code>excluded</code> in the "OUTPUT" section of the docstring for <code>adaptive_refinement</code>, please change this to something like: "if <code>excluded</code>, then x-values for which the calculation failed are included in the list, with <code></code>'NaN'<code></code> as the y-value.
</p>
<p>
For the same reason, in the INPUT section of the docstring for <code>generate_plot_points</code>, please change "a list of discovered points, for which" to "a list of discovered x-values, at which". And in the new doctest of this method, please change "Excluded points" to "Excluded x-values".
</p>
<p>
The term "value" usually refers to a value of the function, or, in other words, a y-value, so I find it confusing when this word is used for a value of x. Therefore, in the OUTPUT section of the docstring for <code>generate_plot_points</code>, please change "a list of not-defined values" to something like "a list of x-values at which the function is not defined". Please also change the name of the variable <code>values</code> to <code>x_values</code> (or something similar).
</p>
<p>
The file sometimes has two blank lines after "INPUT:" or "OUTPUT:", and sometimes only one. Please standardize this, even though this was not your fault. (I think there is only supposed to be one.)
</p>
<p>
(Let me know if you would like me to make these changes to the file for you.)
</p>
Ticketgh-DaveWitteMorrisSun, 03 Jan 2021 06:45:14 GMT
https://trac.sagemath.org/ticket/29954#comment:21
https://trac.sagemath.org/ticket/29954#comment:21
<p>
I opened ticket <a class="new ticket" href="https://trac.sagemath.org/ticket/31169" title="defect: Metaticket: improve quality of one-variable function plots (new)">#31169</a> for additional improvements to (adaptive) plotting.
</p>
TicketgitWed, 06 Jan 2021 09:20:06 GMTcommit changed
https://trac.sagemath.org/ticket/29954#comment:22
https://trac.sagemath.org/ticket/29954#comment:22
<ul>
<li><strong>commit</strong>
changed from <em>5260baf0ac89244f4883c1cca87f7be7b8a1a2ae</em> to <em>ebc50c7c3081fb58ea54ad006380e257e2769c31</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="https://git.sagemath.org/sage.git/commit/?id=bb285fbfbeff927f3abd7ac11385897ea3bba750"><span class="icon"></span>bb285fb</a></td><td><code>reviewers comments</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=31dec06a0391698bc747b5f1420b03f2e1a0e62b"><span class="icon"></span>31dec06</a></td><td><code>somewhat adopt general conventions for documentation</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=ebc50c7c3081fb58ea54ad006380e257e2769c31"><span class="icon"></span>ebc50c7</a></td><td><code>make excluded a keyword argument only</code>
</td></tr></table>
Ticketgh-kliemWed, 06 Jan 2021 09:27:06 GMTstatus changed
https://trac.sagemath.org/ticket/29954#comment:23
https://trac.sagemath.org/ticket/29954#comment:23
<ul>
<li><strong>status</strong>
changed from <em>needs_work</em> to <em>needs_review</em>
</li>
</ul>
TicketgitFri, 08 Jan 2021 04:38:54 GMTcommit changed
https://trac.sagemath.org/ticket/29954#comment:24
https://trac.sagemath.org/ticket/29954#comment:24
<ul>
<li><strong>commit</strong>
changed from <em>ebc50c7c3081fb58ea54ad006380e257e2769c31</em> to <em>d6e51f32f5276a8569fb666c1395ca8840233b02</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="https://git.sagemath.org/sage.git/commit/?id=4edd374e71e57c5efcfc74dad92de0a6f89dca92"><span class="icon"></span>4edd374</a></td><td><code>Merge branch 'public/29954-only-fix-bug' of git://trac.sagemath.org/sage into 29954unstableplot</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=d6e51f32f5276a8569fb666c1395ca8840233b02"><span class="icon"></span>d6e51f3</a></td><td><code>minor docstring edits</code>
</td></tr></table>
Ticketgh-DaveWitteMorrisFri, 08 Jan 2021 04:42:43 GMT
https://trac.sagemath.org/ticket/29954#comment:25
https://trac.sagemath.org/ticket/29954#comment:25
<p>
Thanks again! I made a few minor edits to some docstrings. If you agree with these changes, you can set to positive review on my behalf.
</p>
Ticketgh-kliemFri, 08 Jan 2021 07:38:07 GMTstatus changed
https://trac.sagemath.org/ticket/29954#comment:26
https://trac.sagemath.org/ticket/29954#comment:26
<ul>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>positive_review</em>
</li>
</ul>
<p>
Sure. Thank you.
</p>
TicketvbraunSun, 17 Jan 2021 13:46:22 GMTstatus, branch changed; resolution set
https://trac.sagemath.org/ticket/29954#comment:27
https://trac.sagemath.org/ticket/29954#comment:27
<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>public/29954-only-fix-bug</em> to <em>d6e51f32f5276a8569fb666c1395ca8840233b02</em>
</li>
</ul>
Ticket