Sage: Ticket #26042: Real transcendental extension fields
https://trac.sagemath.org/ticket/26042
<p>
An often requested feature is to be able to work in say QQ[pi], QQ[e],
QQ[e, pi], or similar extensions.
</p>
<ul><li><a class="ext-link" href="https://groups.google.com/d/topic/sage-devel/80zQZFX8NEE/discussion"><span class="icon"></span>2018-08-08, Pat Hooper on sage-devel</a>
</li></ul><blockquote class="citation">
<p>
I think Sage should support real transcendental extension fields.
It does not as far as I can tell. For example it should support
arithmetic and comparisons in Q(e) with e the usual constant e [...]
</p>
</blockquote>
<ul><li><a class="ext-link" href="https://groups.google.com/d/msg/sage-devel/0vAo1AnPVOU/2L_HrHR9Q4wJ"><span class="icon"></span>2014-03-13, Miguel Marco on sage-devel</a>
</li></ul><blockquote class="citation">
<p>
The problem is that you cannot know if a certain expression involving
pi, e and cos(3/4) is zero or not [...]. That means that, for instance,
you don't know if you can take its inverse.
</p>
</blockquote>
<ul><li><a class="ext-link" href="https://groups.google.com/d/msg/sage-devel/aPk-mGKH8eI/yMGxUFZ4Z3YJ"><span class="icon"></span>2013-05-20, Vincent Delecroix on sage-devel</a>:
</li></ul><blockquote class="citation">
<p>
I would be happy if there was a way to work with the transcendental
extension QQ[pi] where I can assert that an expression is zero.
</p>
</blockquote>
<p>
An implementation is attached to <a class="ext-link" href="https://groups.google.com/d/msg/sage-devel/80zQZFX8NEE/L4KBWtrlDAAJ"><span class="icon"></span>Pat Hooper's 2018-08-08 post on sage-devel</a>.
</p>
en-usSagehttps://trac.sagemath.org/chrome/site/logo_sagemath_trac.png
https://trac.sagemath.org/ticket/26042
Trac 1.1.6slelievreFri, 10 Aug 2018 12:00:02 GMTcc set
https://trac.sagemath.org/ticket/26042#comment:1
https://trac.sagemath.org/ticket/26042#comment:1
<ul>
<li><strong>cc</strong>
<em>dimpase</em> <em>mmarco</em> <em>vdelecroix</em> added
</li>
</ul>
<p>
Not sure what component to set this to: algebra? basic arithmetic? symbolics?
or maybe something else?
</p>
TicketslelievreFri, 10 Aug 2018 12:04:26 GMTdescription changed
https://trac.sagemath.org/ticket/26042#comment:2
https://trac.sagemath.org/ticket/26042#comment:2
<ul>
<li><strong>description</strong>
modified (<a href="/ticket/26042?action=diff&version=2">diff</a>)
</li>
</ul>
TicketwphooperFri, 10 Aug 2018 14:58:23 GMT
https://trac.sagemath.org/ticket/26042#comment:3
https://trac.sagemath.org/ticket/26042#comment:3
<p>
Thanks Samuel for posting this. Two comments:
</p>
<p>
1) You can't rigorously decide equality in Q(e,pi) because you don't know if Q(e)(pi) is a transcendental extension of Q(e). If this extension is not transcendental, it would mean that in my implementation checking when calling x<y for x,y in Q(e,pi) could enter an infinite loop (in the case where x=y but are represented differently as rational functions in e and pi), but when a result is returned to x<y, then that answer would be rigorous. So, there might still be some point in supporting Q(e,pi)...
</p>
<p>
2) Defining Q(r) where r is a random number in (say) [0, 1] would be important to me. I'm not sure how many chains of transcendental extensions are known, but I think Sage should support chains involving random numbers at least, e.g., Q(e, r_1, r_2, ...)
</p>
TicketvdelecroixFri, 10 Aug 2018 15:29:12 GMT
https://trac.sagemath.org/ticket/26042#comment:4
https://trac.sagemath.org/ticket/26042#comment:4
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/26042#comment:3" title="Comment 3">wphooper</a>:
</p>
<blockquote class="citation">
<p>
2) Defining Q(r) where r is a random number in (say) [0, 1] would be important to me.
</p>
</blockquote>
<p>
+1. And even K(r) where K is a (real embedded) number field.
</p>
TicketwphooperFri, 17 Aug 2018 20:46:39 GMTbranch set
https://trac.sagemath.org/ticket/26042#comment:5
https://trac.sagemath.org/ticket/26042#comment:5
<ul>
<li><strong>branch</strong>
set to <em>u/wphooper/real_transcendental_extension_fields</em>
</li>
</ul>
TicketvdelecroixFri, 17 Aug 2018 22:33:03 GMTcommit set
https://trac.sagemath.org/ticket/26042#comment:6
https://trac.sagemath.org/ticket/26042#comment:6
<ul>
<li><strong>commit</strong>
set to <em>f62b687b5bce1364903faf85ccba9590c393a9f2</em>
</li>
</ul>
<p>
Hi Pat,
</p>
<p>
You should not be creating <code>NestedIntervalRealSet</code> but use <code>RealLazyField</code>. The latter is far from being perfect, but it is exactly inteded for this purpose.
</p>
<pre class="wiki">sage: RLF.pi()
3.141592653589794?
sage: my_pi = RLF.pi()
sage: my_pi.numerical_approx(digits=50)
3.1415926535897932384626433832795028841971693993751
sage: RealIntervalField(100)(my_pi)
3.14159265358979323846264338328?
</pre><hr />
<p>
New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit?id=f62b687b5bce1364903faf85ccba9590c393a9f2"><span class="icon"></span>f62b687</a></td><td><code>First commit</code>
</td></tr></table>
TicketwphooperSat, 18 Aug 2018 01:36:00 GMT
https://trac.sagemath.org/ticket/26042#comment:7
https://trac.sagemath.org/ticket/26042#comment:7
<p>
Hi Vincent,
</p>
<p>
Thank you. Sure, I'll try to switch to <a class="missing wiki">RealLazyField?</a>. I hadn't realized that you could get intervals from RLF.
</p>
<p>
The other thing I use is <a class="missing wiki">FunctionField?</a>. One issue I was having was that it seems not to cancel constants in the numerator and denominator:
</p>
<pre class="wiki">sage: K.<x>=FunctionField(QQ)
sage: y = (2*x)/(2*(x+1)); y
2*x/(2*x + 2)
sage: y^2
4*x^2/(4*x^2 + 8*x + 4)
</pre><p>
These constants build up when performing the kind of repeated operations I was doing and slow things down a lot. I deal with this by calling ".factor().expand()" on <a class="missing wiki">FunctionField?</a> elements at every step, but this also seems slow and I'm not sure if it will work in all fields...
</p>
TicketvdelecroixSat, 18 Aug 2018 03:08:49 GMT
https://trac.sagemath.org/ticket/26042#comment:8
https://trac.sagemath.org/ticket/26042#comment:8
<p>
This will not solve your simplification problem but I wonder why these two are different
</p>
<pre class="wiki">sage: QQ['t'].fraction_field()
Fraction Field of Univariate Polynomial Ring in t over Rational Field
sage: FunctionField(QQ, 't')
Rational function field in t over Rational Field
</pre><p>
It seems that the second is just a wrapper over the first one
</p>
<pre class="wiki">sage: K = FunctionField(QQ, 't')
sage: t = K.gen()
sage: parent(t._x) is QQ['t'].fraction_field()
True
sage:
</pre><p>
Concerning simplification in fraction field, this is a non-trivial matter and you may want to have a look at
</p>
<ul><li><a class="ext-link" href="https://groups.google.com/forum/#!topic/sage-devel/vaHMDSt1bgs"><span class="icon"></span>https://groups.google.com/forum/#!topic/sage-devel/vaHMDSt1bgs</a>
</li><li><a class="ext-link" href="https://groups.google.com/forum/#!topic/sage-devel/Pzkkfjhj3XI"><span class="icon"></span>https://groups.google.com/forum/#!topic/sage-devel/Pzkkfjhj3XI</a>
</li></ul><p>
If you really want to work with a transcendental extension of QQ then better work with <code>ZZ['x'].fraction_field()</code> that apparently works better with simplification.
</p>
TicketgitMon, 03 Dec 2018 17:02:32 GMTcommit changed
https://trac.sagemath.org/ticket/26042#comment:9
https://trac.sagemath.org/ticket/26042#comment:9
<ul>
<li><strong>commit</strong>
changed from <em>f62b687b5bce1364903faf85ccba9590c393a9f2</em> to <em>debf39c820b66c64428d1d8df3e71fbbae6d4f36</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=debf39c820b66c64428d1d8df3e71fbbae6d4f36"><span class="icon"></span>debf39c</a></td><td><code>Rewrite using RealLazyField.</code>
</td></tr></table>
TicketwphooperMon, 03 Dec 2018 17:15:17 GMT
https://trac.sagemath.org/ticket/26042#comment:10
https://trac.sagemath.org/ticket/26042#comment:10
<p>
I switched to <code>RealLazyField</code>. I also created a class (and parent) which represents a lazily computed random number in [0,1] (and created a <code>random_real</code> convenience function).
</p>
<p>
I did not address the simplifications problem. I'd like to work in the general case at first. Once people are happy with the general case, I think it will be worth doing some optimization when the base is <code>QQ</code> and perhaps also for number fields.
</p>
TicketvdelecroixTue, 04 Dec 2018 07:15:59 GMT
https://trac.sagemath.org/ticket/26042#comment:11
https://trac.sagemath.org/ticket/26042#comment:11
<p>
Hi Pat,
</p>
<p>
Some random thoughts
</p>
<ol><li>It does not make much sense to generate the bits by packets of 53. I know that 53 is the standard mantissa for double floating point, but in the present situation it would be more natural to use 64 bits. (idem in <code>_mpfr_</code> or <code>_richcmp_</code>)
</li></ol><ol start="2"><li>I don't think that the following is necessary in <code>_coerce_map_from_</code>
<pre class="wiki">+ if S == self:
+ return True
</pre></li></ol><ol start="3"><li>Why not make the <code>LazyRandomElement</code> an actual element of the real lazy field <code>RLF</code>? It would be better than having the ad-hoc <code>LazyRandomNumberSet_class</code>.
</li></ol>
TicketgitWed, 05 Dec 2018 16:42:15 GMTcommit changed
https://trac.sagemath.org/ticket/26042#comment:12
https://trac.sagemath.org/ticket/26042#comment:12
<ul>
<li><strong>commit</strong>
changed from <em>debf39c820b66c64428d1d8df3e71fbbae6d4f36</em> to <em>bb2ce193ea22d6bffc18bbab2f7f9d6c619ae63e</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=a7347e8722b298934de84ebda9beae16be13f28d"><span class="icon"></span>a7347e8</a></td><td><code>Add support for LazyRandomNumber and RLF.random() to get a random number in [0,1].</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=bb2ce193ea22d6bffc18bbab2f7f9d6c619ae63e"><span class="icon"></span>bb2ce19</a></td><td><code>Remove random number classes, make use of random numbers added to RLF.</code>
</td></tr></table>
TicketgitWed, 05 Dec 2018 16:55:04 GMTcommit changed
https://trac.sagemath.org/ticket/26042#comment:13
https://trac.sagemath.org/ticket/26042#comment:13
<ul>
<li><strong>commit</strong>
changed from <em>bb2ce193ea22d6bffc18bbab2f7f9d6c619ae63e</em> to <em>fe54abb47eface212ab114b9f69df5a9610bdb9b</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=fe54abb47eface212ab114b9f69df5a9610bdb9b"><span class="icon"></span>fe54abb</a></td><td><code>Removal of unnecessary lines in _coerce_map_from_</code>
</td></tr></table>
TicketwphooperWed, 05 Dec 2018 17:16:36 GMT
https://trac.sagemath.org/ticket/26042#comment:14
https://trac.sagemath.org/ticket/26042#comment:14
<p>
Hi Vincent,
</p>
<ol start="3"><li>I originally wanted to do this, but I ran into trouble with categories. I made changes in this direction, but I'm still having the issue. Namely <code>RLF.random()._test_category()</code> gives an error. It would be great if you could fix or tell me how to fix it.
</li></ol><ol><li>In <code>LazyRandomNumber</code> I decided to store representations of <code>RealIntervalField</code>s with precision <code>64*2^k</code> for <code>k=0,1,2,...</code>. Previously, I was doing <code>53*k</code>. The new use of exponential growth here means that the memory requirements to get a random number of large precision drop from quadratic to linear (and presumably some algorithm times drop as well).
</li></ol><ol start="2"><li>Fixed in second commit above.
</li></ol><ol start="4"><li>I noticed a bug in <code>RealLazyField</code>:
<pre class="wiki">sage: float(sin(RLF.pi()))
AttributeError: type object 'float' has no attribute 'pi'
</pre></li></ol><p>
The same error appears with <code>RDF</code> replacing <code>float</code>.
</p>
<p>
I'm thinking we solve issue 3 above, then maybe it makes sense to make <code>RealTranscendentalExtensionField</code> support underlying functions fields such as <code>ZZ['x'].fraction_field()</code>. I wanted to see that people are happy with this scheme before I put more work in.
</p>
TicketvdelecroixWed, 05 Dec 2018 18:05:03 GMT
https://trac.sagemath.org/ticket/26042#comment:15
https://trac.sagemath.org/ticket/26042#comment:15
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/26042#comment:14" title="Comment 14">wphooper</a>:
</p>
<blockquote class="citation">
<ol start="4"><li>I noticed a bug in <code>RealLazyField</code>:
<pre class="wiki">sage: float(sin(RLF.pi()))
AttributeError: type object 'float' has no attribute 'pi'
</pre></li></ol><p>
The same error appears with <code>RDF</code> replacing <code>float</code>.
</p>
</blockquote>
<p>
It is indeed a bug. A new ticket should be open to fix the issue. Note that curiously the following does work
</p>
<pre class="wiki">sage: (sin(RLF.pi())).eval(RDF)
1.2246467991473515e-16
</pre>
TicketwphooperWed, 05 Dec 2018 19:13:54 GMT
https://trac.sagemath.org/ticket/26042#comment:16
https://trac.sagemath.org/ticket/26042#comment:16
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/26042#comment:15" title="Comment 15">vdelecroix</a>:
</p>
<blockquote class="citation">
<p>
It is indeed a bug. A new ticket should be open to fix the issue. Note that curiously the following does work
</p>
<pre class="wiki">sage: (sin(RLF.pi())).eval(RDF)
1.2246467991473515e-16
</pre></blockquote>
<p>
I opened a ticket: <a class="ext-link" href="https://trac.sagemath.org/ticket/26839"><span class="icon"></span>https://trac.sagemath.org/ticket/26839</a>
</p>
TicketvdelecroixThu, 06 Dec 2018 17:40:51 GMT
https://trac.sagemath.org/ticket/26042#comment:17
https://trac.sagemath.org/ticket/26042#comment:17
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/26042#comment:14" title="Comment 14">wphooper</a>:
</p>
<blockquote class="citation">
<ol start="3"><li>I originally wanted to do this, but I ran into trouble with categories. I made changes in this direction, but I'm still having the issue. Namely <code>RLF.random()._test_category()</code> gives an error. It would be great if you could fix or tell me how to fix it.
</li></ol></blockquote>
<p>
This fails for a very bad reason. One quick fix is to change the declaration
</p>
<div class="wiki-code"><div class="code"><pre><span class="gd">- class LazyRandomNumber(LazyFieldElement):
</span><span class="gi">+ cdef class LazyRandomNumber(LazyFieldElement):
</span></pre></div></div><p>
(and you probably want to copy the declaration in <code>real_lazy.pxd</code>)
</p>
<p>
The reason why it fails is because any element of a parent should also inherit some methods that are defined by the category mechanism (the stuff in <code>sage/categories/</code>). For that machinery to work some extra inheritance construction is done on the fly. But this operates differently on Python classes (without cdef) and Cython classes (with cdef). For clearer explanation, you might want to have a look at <a class="ext-link" href="http://doc.sagemath.org/html/en/thematic_tutorials/coercion_and_categories.html#coercion-and-categories"><span class="icon"></span>Simon King's tutorial</a>.
</p>
<p>
An alternative way to solve the problem is to call explicitely the inheritance machinery on your Python class... but the quick fix above is probably nicer.
</p>
TicketgitTue, 17 Sep 2019 16:17:46 GMTcommit changed
https://trac.sagemath.org/ticket/26042#comment:18
https://trac.sagemath.org/ticket/26042#comment:18
<ul>
<li><strong>commit</strong>
changed from <em>fe54abb47eface212ab114b9f69df5a9610bdb9b</em> to <em>de1f92d197316edfba1611026da94f6d9b0adce0</em>
</li>
</ul>
<p>
Branch pushed to git repo; I updated commit sha1. This was a forced push. New commits:
</p>
<table class="wiki">
<tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=43fabbabaaceb7f7afca37a26fcebcaecb7cbdc2"><span class="icon"></span>43fabba</a></td><td><code>First commit</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=961c60b69592a414dd07e385b52ace8e2778b5ba"><span class="icon"></span>961c60b</a></td><td><code>Rewrite using RealLazyField.</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=580303a544c9a1e206fec36aaf9a3f873b8e0fe3"><span class="icon"></span>580303a</a></td><td><code>Add support for LazyRandomNumber and RLF.random() to get a random number in [0,1].</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=26faf3d1d354c7816a65db45c977dbf7e1ccaee3"><span class="icon"></span>26faf3d</a></td><td><code>Remove random number classes, make use of random numbers added to RLF.</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=58c57f91651f97ba77dbd5bc40ec0ce6f02bf441"><span class="icon"></span>58c57f9</a></td><td><code>Removal of unnecessary lines in _coerce_map_from_</code>
</td></tr><tr><td><a class="ext-link" href="https://git.sagemath.org/sage.git/commit/?id=de1f92d197316edfba1611026da94f6d9b0adce0"><span class="icon"></span>de1f92d</a></td><td><code>Convert the LazyRandomNumber class to cython</code>
</td></tr></table>
TicketwphooperTue, 17 Sep 2019 16:22:10 GMTcc changed
https://trac.sagemath.org/ticket/26042#comment:19
https://trac.sagemath.org/ticket/26042#comment:19
<ul>
<li><strong>cc</strong>
<em>saraedum</em> <em>slelievre</em> added
</li>
</ul>
<p>
Rebased on 8.9.rc0.
</p>
<p>
Cythonized <code>LazyRandomNumber</code> so that now <code>RLF.random()._test_category()</code> passes.
</p>
TicketslelievreTue, 17 Sep 2019 20:10:04 GMTcomponent changed
https://trac.sagemath.org/ticket/26042#comment:20
https://trac.sagemath.org/ticket/26042#comment:20
<ul>
<li><strong>component</strong>
changed from <em>PLEASE CHANGE</em> to <em>algebra</em>
</li>
</ul>
<p>
Setting component to algebra for lack of a better idea.
</p>
TicketdimpaseTue, 17 Sep 2019 20:14:47 GMT
https://trac.sagemath.org/ticket/26042#comment:21
https://trac.sagemath.org/ticket/26042#comment:21
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/26042#comment:20" title="Comment 20">slelievre</a>:
</p>
<blockquote class="citation">
<p>
Setting component to algebra for lack of a better idea.
</p>
</blockquote>
<p>
Tarski rotating in his grave...
</p>
TicketgitWed, 18 Sep 2019 04:20:24 GMTcommit changed
https://trac.sagemath.org/ticket/26042#comment:22
https://trac.sagemath.org/ticket/26042#comment:22
<ul>
<li><strong>commit</strong>
changed from <em>de1f92d197316edfba1611026da94f6d9b0adce0</em> to <em>0e93f2fdb2827c131f26593e1572b9f5467f8e89</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=0e93f2fdb2827c131f26593e1572b9f5467f8e89"><span class="icon"></span>0e93f2f</a></td><td><code>Adjust to location change of FunctionFieldElement.</code>
</td></tr></table>
TicketslelievreWed, 18 Sep 2019 04:27:09 GMT
https://trac.sagemath.org/ticket/26042#comment:23
https://trac.sagemath.org/ticket/26042#comment:23
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/26042#comment:21" title="Comment 21">dimpase</a>:
</p>
<blockquote class="citation">
<p>
Replying to <a class="ticket" href="https://trac.sagemath.org/ticket/26042#comment:20" title="Comment 20">slelievre</a>:
</p>
<blockquote class="citation">
<p>
Setting component to algebra for lack of a better idea.
</p>
</blockquote>
<p>
Tarski rotating in his grave...
</p>
</blockquote>
<p>
The "number fields" component might be the closest fit...
</p>
TicketgitWed, 18 Sep 2019 04:55:47 GMTcommit changed
https://trac.sagemath.org/ticket/26042#comment:24
https://trac.sagemath.org/ticket/26042#comment:24
<ul>
<li><strong>commit</strong>
changed from <em>0e93f2fdb2827c131f26593e1572b9f5467f8e89</em> to <em>4a82da8237254203b4d36ac3498356cde2214edf</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=4a82da8237254203b4d36ac3498356cde2214edf"><span class="icon"></span>4a82da8</a></td><td><code>Make python3 compatible; Add "long time" doctest comments.</code>
</td></tr></table>
TicketwphooperWed, 18 Sep 2019 05:19:48 GMTstatus changed
https://trac.sagemath.org/ticket/26042#comment:25
https://trac.sagemath.org/ticket/26042#comment:25
<ul>
<li><strong>status</strong>
changed from <em>new</em> to <em>needs_review</em>
</li>
</ul>
<p>
The issues mentioned in the discussion above all seem resolved now. All tests are passing for me in both python2 and python3 now. Also the cancellation issue mentioned in comment 7 seems to have been resolved by changes in <code>FunctionField</code>.
</p>
<p>
Changed to "needs review".
</p>
<p>
(I'm grateful to Samuel Lelièvre for help getting through some issues I was having with cython and compiling sage.)
</p>
Ticketgh-mjungmathWed, 14 Oct 2020 21:43:28 GMT
https://trac.sagemath.org/ticket/26042#comment:26
https://trac.sagemath.org/ticket/26042#comment:26
<p>
This is a nice feature!
</p>
<p>
Unfortunately, most functions miss a test and/or example block.
</p>
<p>
See <a class="ext-link" href="https://doc.sagemath.org/html/en/developer/coding_basics.html#the-docstring-of-a-function-content"><span class="icon"></span>here</a> for details.
</p>
TicketdimpaseThu, 15 Oct 2020 11:05:09 GMTstatus changed; work_issues set
https://trac.sagemath.org/ticket/26042#comment:27
https://trac.sagemath.org/ticket/26042#comment:27
<ul>
<li><strong>status</strong>
changed from <em>needs_review</em> to <em>needs_work</em>
</li>
<li><strong>work_issues</strong>
set to <em>many tests/examples missing</em>
</li>
</ul>
<p>
Indeed, tests/examples should be present for all the public functions. Setting to needs work due to this.
</p>
Ticket