summaryrefslogtreecommitdiff
path: root/macros/generic/polexpr/polexpr.html
diff options
context:
space:
mode:
Diffstat (limited to 'macros/generic/polexpr/polexpr.html')
-rw-r--r--macros/generic/polexpr/polexpr.html3988
1 files changed, 178 insertions, 3810 deletions
diff --git a/macros/generic/polexpr/polexpr.html b/macros/generic/polexpr/polexpr.html
index 5f695deb4b..23dafab2c2 100644
--- a/macros/generic/polexpr/polexpr.html
+++ b/macros/generic/polexpr/polexpr.html
@@ -1,3822 +1,190 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta charset="utf-8"/>
-<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" />
-<title>polexpr reference documentation</title>
-<style type="text/css">
-
-/* Minimal style sheet for the HTML output of Docutils. */
-/* */
-/* :Author: Günter Milde, based on html4css1.css by David Goodger */
-/* :Id: $Id: minimal.css 8397 2019-09-20 11:09:34Z milde $ */
-/* :Copyright: © 2015 Günter Milde. */
-/* :License: Released under the terms of the `2-Clause BSD license`_, */
-/* in short: */
-/* */
-/* Copying and distribution of this file, with or without modification, */
-/* are permitted in any medium without royalty provided the copyright */
-/* notice and this notice are preserved. */
-/* */
-/* This file is offered as-is, without any warranty. */
-/* */
-/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */
-
-/* This CSS2.1_ stylesheet defines rules for Docutils elements without */
-/* HTML equivalent. It is required to make the document semantic visible. */
-/* */
-/* .. _CSS2.1: http://www.w3.org/TR/CSS2 */
-/* .. _validates: http://jigsaw.w3.org/css-validator/validator$link */
-
-/* alignment of text and inline objects inside block objects*/
-.align-left { text-align: left; }
-.align-right { text-align: right; }
-.align-center { clear: both; text-align: center; }
-.align-top { vertical-align: top; }
-.align-middle { vertical-align: middle; }
-.align-bottom { vertical-align: bottom; }
-
-/* titles */
-h1.title, p.subtitle {
- text-align: center;
-}
-p.topic-title,
-p.sidebar-title,
-p.rubric,
-p.admonition-title,
-p.system-message-title {
- font-weight: bold;
-}
-h1 + p.subtitle,
-h1 + p.section-subtitle {
- font-size: 1.6em;
-}
-h2 + p.section-subtitle { font-size: 1.28em; }
-p.subtitle,
-p.section-subtitle,
-p.sidebar-subtitle {
- font-weight: bold;
- margin-top: -0.5em;
-}
-p.sidebar-title,
-p.rubric {
- font-size: larger;
-}
-p.rubric { color: maroon; }
-a.toc-backref {
- color: black;
- text-decoration: none; }
-
-/* Warnings, Errors */
-div.caution p.admonition-title,
-div.attention p.admonition-title,
-div.danger p.admonition-title,
-div.error p.admonition-title,
-div.warning p.admonition-title,
-div.system-messages h1,
-div.error,
-span.problematic,
-p.system-message-title {
- color: red;
-}
-
-/* inline literals */
-span.docutils.literal {
- font-family: monospace;
- white-space: pre-wrap;
-}
-/* do not wraph at hyphens and similar: */
-.literal > span.pre { white-space: nowrap; }
-
-/* Lists */
-
-/* compact and simple lists: no margin between items */
-.simple li, .compact li,
-.simple ul, .compact ul,
-.simple ol, .compact ol,
-.simple > li p, .compact > li p,
-dl.simple > dd, dl.compact > dd {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-/* Table of Contents */
-div.topic.contents { margin: 0.5em 0; }
-div.topic.contents ul {
- list-style-type: none;
- padding-left: 1.5em;
-}
-
-/* Enumerated Lists */
-ol.arabic { list-style: decimal }
-ol.loweralpha { list-style: lower-alpha }
-ol.upperalpha { list-style: upper-alpha }
-ol.lowerroman { list-style: lower-roman }
-ol.upperroman { list-style: upper-roman }
-
-dt span.classifier { font-style: italic }
-dt span.classifier:before {
- font-style: normal;
- margin: 0.5em;
- content: ":";
-}
-
-/* Field Lists and drivatives */
-/* bold field name, content starts on the same line */
-dl.field-list > dt,
-dl.option-list > dt,
-dl.docinfo > dt,
-dl.footnote > dt,
-dl.citation > dt {
- font-weight: bold;
- clear: left;
- float: left;
- margin: 0;
- padding: 0;
- padding-right: 0.5em;
-}
-/* Offset for field content (corresponds to the --field-name-limit option) */
-dl.field-list > dd,
-dl.option-list > dd,
-dl.docinfo > dd {
- margin-left: 9em; /* ca. 14 chars in the test examples */
-}
-/* start field-body on a new line after long field names */
-dl.field-list > dd > *:first-child,
-dl.option-list > dd > *:first-child
-{
- display: inline-block;
- width: 100%;
- margin: 0;
-}
-/* field names followed by a colon */
-dl.field-list > dt:after,
-dl.docinfo > dt:after {
- content: ":";
-}
-
-/* Bibliographic Fields (docinfo) */
-pre.address { font: inherit; }
-dd.authors > p { margin: 0; }
-
-/* Option Lists */
-dl.option-list { margin-left: 1.5em; }
-dl.option-list > dt { font-weight: normal; }
-span.option { white-space: nowrap; }
-
-/* Footnotes and Citations */
-dl.footnote.superscript > dd {margin-left: 1em; }
-dl.footnote.brackets > dd {margin-left: 2em; }
-dl > dt.label { font-weight: normal; }
-a.footnote-reference.brackets:before,
-dt.label > span.brackets:before { content: "["; }
-a.footnote-reference.brackets:after,
-dt.label > span.brackets:after { content: "]"; }
-a.footnote-reference.superscript,
-dl.footnote.superscript > dt.label {
- vertical-align: super;
- font-size: smaller;
-}
-dt.label > span.fn-backref { margin-left: 0.2em; }
-dt.label > span.fn-backref > a { font-style: italic; }
-
-/* Line Blocks */
-div.line-block { display: block; }
-div.line-block div.line-block {
- margin-top: 0;
- margin-bottom: 0;
- margin-left: 40px;
-}
-
-/* Figures, Images, and Tables */
-.figure.align-left,
-figure.align-left,
-img.align-left,
-object.align-left,
-table.align-left {
- margin-right: auto;
-}
-.figure.align-center,
-figure.align-center,
-img.align-center,
-object.align-center,
-table.align-center {
- margin-left: auto;
- margin-right: auto;
-}
-.figure.align-right,
-figure.align-right,
-img.align-right,
-object.align-right,
-table.align-right {
- margin-left: auto;
-}
-.figure.align-center, .figure.align-right,
-figure.align-center, figure.align-right,
-img.align-center, img.align-right,
-object.align-center, object.align-right {
- display: block;
-}
-/* reset inner alignment in figures and tables */
-.figure.align-left, .figure.align-right,
-figure.align-left, figure.align-right,
-table.align-left, table.align-center, table.align-right {
- text-align: inherit;
-}
-
-/* Admonitions and System Messages */
-div.admonition,
-div.system-message,
-div.sidebar,
-aside.sidebar {
- margin: 1em 1.5em;
- border: medium outset;
- padding-top: 0.5em;
- padding-bottom: 0.5em;
- padding-right: 1em;
- padding-left: 1em;
-}
-
-/* Sidebar */
-div.sidebar,
-aside.sidebar {
- width: 30%;
- max-width: 26em;
- float: right;
- clear: right;
-}
-
-/* Text Blocks */
-blockquote,
-div.topic,
-pre.literal-block,
-pre.doctest-block,
-pre.math,
-pre.code {
- margin-left: 1.5em;
- margin-right: 1.5em;
-}
-pre.code .ln { color: gray; } /* line numbers */
-
-/* Tables */
-table { border-collapse: collapse; }
-td, th {
- border-style: solid;
- border-color: silver;
- padding: 0 1ex;
- border-width: thin;
-}
-td > p:first-child, th > p:first-child { margin-top: 0; }
-td > p, th > p { margin-bottom: 0; }
-
-table > caption {
- text-align: left;
- margin-bottom: 0.25em
-}
-
-table.borderless td, table.borderless th {
- border: 0;
- padding: 0;
- padding-right: 0.5em /* separate table cells */
-}
-
-/* Document Header and Footer */
-/* div.header, */
-/* header { border-bottom: 1px solid black; } */
-/* div.footer, */
-/* footer { border-top: 1px solid black; } */
-
-/* new HTML5 block elements: set display for older browsers */
-header, section, footer, aside, nav, main, article, figure {
- display: block;
-}
-
-</style>
-<style type="text/css">
-
-/* CSS31_ style sheet for the output of Docutils HTML writers. */
-/* Rules for easy reading and pre-defined style variants. */
-/* */
-/* :Author: Günter Milde, based on html4css1.css by David Goodger */
-/* :Id: $Id: plain.css 8397 2019-09-20 11:09:34Z milde $ */
-/* :Copyright: © 2015 Günter Milde. */
-/* :License: Released under the terms of the `2-Clause BSD license`_, */
-/* in short: */
-/* */
-/* Copying and distribution of this file, with or without modification, */
-/* are permitted in any medium without royalty provided the copyright */
-/* notice and this notice are preserved. */
-/* */
-/* This file is offered as-is, without any warranty. */
-/* */
-/* .. _2-Clause BSD license: http://www.spdx.org/licenses/BSD-2-Clause */
-/* .. _CSS3: http://www.w3.org/TR/CSS3 */
-
-
-/* Document Structure */
-/* ****************** */
-
-/* "page layout" */
-body {
- margin: 0;
- background-color: #dbdbdb;
-}
-div.document,
-main {
- line-height:1.3;
- counter-reset: table;
- /* counter-reset: figure; */
- /* avoid long lines --> better reading */
- /* OTOH: lines should not be too short because of missing hyphenation, */
- max-width: 50em;
- padding: 1px 2%; /* 1px on top avoids grey bar above title (mozilla) */
- margin: auto;
- background-color: white;
-}
-
-/* Sections */
-
-/* Transitions */
-
-hr.docutils {
- width: 80%;
- margin-top: 1em;
- margin-bottom: 1em;
- clear: both;
-}
-
-/* Paragraphs */
-/* ========== */
-
-/* vertical space (parskip) */
-p, ol, ul, dl,
-div.line-block,
-div.topic,
-table {
- margin-top: 0.5em;
- margin-bottom: 0.5em;
-}
-p:first-child { margin-top: 0; }
-/* (:last-child is new in CSS 3) */
-p:last-child { margin-bottom: 0; }
-
-h1, h2, h3, h4, h5, h6,
-dl > dd {
- margin-bottom: 0.5em;
-}
-
-/* Lists */
-/* ===== */
-
-/* Definition Lists */
-
-/* lists nested in definition lists */
-/* (:only-child is new in CSS 3) */
-dd > ul:only-child, dd > ol:only-child { padding-left: 1em; }
-
-/* Description Lists */
-/* styled like in most dictionaries, encyclopedias etc. */
-dl.description > dt {
- font-weight: bold;
- clear: left;
- float: left;
- margin: 0;
- padding: 0;
- padding-right: 0.5em;
-}
-
-/* Field Lists */
-
-/* example for custom field-name width */
-dl.field-list.narrow > dd {
- margin-left: 5em;
-}
-/* run-in: start field-body on same line after long field names */
-dl.field-list.run-in > dd p {
- display: block;
-}
-
-/* Bibliographic Fields */
-
-/* generally, bibliographic fields use special definition list dl.docinfo */
-/* but dedication and abstract are placed into "topic" divs */
-div.abstract p.topic-title {
- text-align: center;
-}
-div.dedication {
- margin: 2em 5em;
- text-align: center;
- font-style: italic;
-}
-div.dedication p.topic-title {
- font-style: normal;
-}
-
-/* Citations */
-dl.citation dt.label {
- font-weight: bold;
-}
-span.fn-backref {
- font-weight: normal;
-}
-
-/* Text Blocks */
-/* =========== */
-
-/* Literal Blocks */
-
-pre.literal-block,
-pre.doctest-block,
-pre.math,
-pre.code {
- font-family: monospace;
-}
-
-/* Block Quotes */
-
-blockquote > table,
-div.topic > table {
- margin-top: 0;
- margin-bottom: 0;
-}
-blockquote p.attribution,
-div.topic p.attribution {
- text-align: right;
- margin-left: 20%;
-}
-
-/* Tables */
-/* ====== */
-
-/* th { vertical-align: bottom; } */
-
-table tr { text-align: left; }
-
-/* "booktabs" style (no vertical lines) */
-table.booktabs {
- border: 0;
- border-top: 2px solid;
- border-bottom: 2px solid;
- border-collapse: collapse;
-}
-table.booktabs * {
- border: 0;
-}
-table.booktabs th {
- border-bottom: thin solid;
-}
-
-/* numbered tables (counter defined in div.document) */
-table.numbered > caption:before {
- counter-increment: table;
- content: "Table " counter(table) ": ";
- font-weight: bold;
-}
-
-/* Explicit Markup Blocks */
-/* ====================== */
-
-/* Footnotes and Citations */
-/* ----------------------- */
-
-/* line on the left */
-dl.footnote {
- padding-left: 1ex;
- border-left: solid;
- border-left-width: thin;
-}
-
-/* Directives */
-/* ---------- */
-
-/* Body Elements */
-/* ~~~~~~~~~~~~~ */
-
-/* Images and Figures */
-
-/* let content flow to the side of aligned images and figures */
-.figure.align-left,
-figure.align-left,
-img.align-left,
-object.align-left {
- display: block;
- clear: left;
- float: left;
- margin-right: 1em;
-}
-.figure.align-right,
-figure.align-right,
-img.align-right,
-object.align-right {
- display: block;
- clear: right;
- float: right;
- margin-left: 1em;
-}
-/* Stop floating sidebars, images and figures at section level 1,2,3 */
-h1, h2, h3 { clear: both; }
-/* Sidebar */
-
-/* Move right. In a layout with fixed margins, */
-/* it can be moved into the margin. */
-div.sidebar,
-aside.sidebar {
- width: 30%;
- max-width: 26em;
- margin-left: 1em;
- margin-right: -2%;
- background-color: #ffffee;
-}
-
-/* Code */
-
-pre.code { padding: 0.7ex }
-pre.code, code { background-color: #eeeeee }
-pre.code .ln { color: gray; } /* line numbers */
-/* basic highlighting: for a complete scheme, see */
-/* http://docutils.sourceforge.net/sandbox/stylesheets/ */
-pre.code .comment, code .comment { color: #5C6576 }
-pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
-pre.code .literal.string, code .literal.string { color: #0C5404 }
-pre.code .name.builtin, code .name.builtin { color: #352B84 }
-pre.code .deleted, code .deleted { background-color: #DEB0A1}
-pre.code .inserted, code .inserted { background-color: #A3D289}
-
-/* Math */
-/* styled separately (see math.css for math-output=HTML) */
-
-/* Epigraph */
-/* Highlights */
-/* Pull-Quote */
-/* Compound Paragraph */
-/* Container */
-
-/* can be styled in a custom stylesheet */
-
-/* Document Header and Footer */
-
-footer, header,
-div.footer, div.header {
- font-size: smaller;
- clear: both;
- padding: 0.5em 2%;
- background-color: #ebebee;
- border: none;
-}
-
-/* Inline Markup */
-/* ============= */
-
-/* Emphasis */
-/* em */
-/* Strong Emphasis */
-/* strong */
-/* Interpreted Text */
-/* span.interpreted */
-/* Title Reference */
-/* cite */
-
-/* Inline Literals */
-/* possible values: normal, nowrap, pre, pre-wrap, pre-line */
-/* span.docutils.literal { white-space: pre-wrap; } */
-
-/* Hyperlink References */
-a { text-decoration: none; }
-
-/* External Targets */
-/* span.target.external */
-/* Internal Targets */
-/* span.target.internal */
-/* Footnote References */
-/* a.footnote-reference */
-/* Citation References */
-/* a.citation-reference */
-
-</style>
-</head>
-<body>
-<div class="document" id="polexpr-reference-documentation">
-<h1 class="title">polexpr reference documentation</h1>
-<p class="subtitle" id="id1">0.8.6 (2022/01/09)</p>
+<!DOCTYPE html>
-<div class="section" id="introduction">
-<h1><a class="toc-backref" href="#id35">Introduction</a></h1>
-<p>This is a TeX and LaTeX macro package.</p>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
+
+ <title>Introduction to polexpr &#8212; polexpr 0.8.7 documentation</title>
+ <link rel="stylesheet" type="text/css" href="polexpr.css" />
+ <link rel="next" title="polexpr reference" href="polexpr-ref.html" />
+ </head><body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="polexpr-ref.html" title="polexpr reference"
+ accesskey="N">next</a></li>
+ <li class="nav-item nav-item-0"><a href="#">polexpr 0.8.7 documentation</a> &#187;</li>
+ <li class="nav-item nav-item-this"><a href="">Introduction to polexpr</a></li>
+ </ul>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <section id="introduction-to-polexpr">
+<h1>Introduction to polexpr</h1>
+<p><a class="reference external" href="https://www.ctan.org/pkg/polexpr">polexpr</a> is a TeX and LaTeX macro package.</p>
<p>To use it with Plain or formats other than LaTeX:</p>
-<pre class="literal-block">\input polexpr.sty</pre>
-<p>To use it with LaTeX:</p>
-<pre class="literal-block">\usepackage{polexpr}</pre>
-<p>The capabilities of the package are implemented via:</p>
-<ul class="simple">
-<li><p>a parser <span class="docutils literal">\poldef</span> allowing to define polynomials via the usual
-algebraic notations,</p></li>
-<li><p>many functions available for use directly in the powerful <span class="docutils literal">\poldef</span> or
-<span class="docutils literal"><span class="pre">\xintexpr/\xinteval</span></span> expandable functional syntax,</p></li>
-<li><p>and macros acting on named polynomials which may serve either as
-alternative to the functional interface or to provide further
-capabilities, such as root localization to arbitrary precision.</p></li>
-</ul>
-</div>
-<div class="section" id="examples-of-root-localization">
-<h1><a class="toc-backref" href="#id36">Examples of root localization</a></h1>
-<p>This legacy section has been moved to the
-<a class="reference external" href="polexpr-examples.pdf">polexpr-examples.pdf</a> document.
-To access it (if previous link does not work):</p>
-<pre class="literal-block">texdoc polexpr-examples</pre>
+<div class="highlight-latex notranslate"><div class="highlight"><pre><span></span><span class="k">\input</span> polexpr.sty
+</pre></div>
</div>
-<div class="section" id="usage-via-xintsession">
-<h1>Usage via <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a></h1>
+<p>To use it with LaTeX:</p>
+<div class="highlight-latex notranslate"><div class="highlight"><pre><span></span><span class="k">\usepackage</span><span class="nb">{</span>polexpr<span class="nb">}</span>
+</pre></div>
+</div>
+<p><a class="reference external" href="https://www.ctan.org/pkg/polexpr">polexpr</a> loads <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> and extends its syntax with a polynomial type.</p>
+<p>Polynomials are defined via the <a class="reference internal" href="polexpr-ref.html#quick"><span class="std std-ref">\poldef</span></a> parser and
+can then be manipulated via TeX macros for various operations such
+as obtaining G.C.D.s, computing derivatives, or indefinite
+integrals… many of these functionalities are available directly
+via functions in the syntax recognized by the <code class="docutils literal notranslate"><span class="pre">\poldef</span></code> parser.</p>
+<p>Apart from the final step of internally creating some TeX macros
+associated with the polynomial name, this is all done completely
+expandably, and a polynomial expression can be fetched directly to
+<code class="docutils literal notranslate"><span class="pre">\xinteval</span></code> for a completely expandable operation from start to
+finish.</p>
+<p>For polynomials fully declared via <code class="docutils literal notranslate"><span class="pre">\poldef</span></code>, root localization
+implementing the <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm algorithm</a> is available via macros.
+Arbitrarily long decimal expansion of all real roots can be
+obtained, and all rational roots can be found exactly.</p>
+<p>The legacy documentation section which showed examples of root
+localization has been moved to the <a class="reference external" href="polexpr-examples.pdf">polexpr-examples.pdf</a> document, where both the TeX code and its
+output are displayed.</p>
+<p>To access this document (if the previous link for some reason does not
+work):</p>
+<div class="highlight-latex notranslate"><div class="highlight"><pre><span></span>texdoc polexpr-examples
+</pre></div>
+</div>
+<section id="usage-via-xintsession">
+<h2>Usage via <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a></h2>
<p>The simplest manner to get a feeling for the package abilities regarding
-root localization is to use it on the command line via the <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a>
-interface. Here is an example:</p>
-<pre class="literal-block">$ rlwrap etex xintsession
-[...xintsession welcome message...]
-Starting in exact mode (floating point evaluations use 16 digits)
-&gt;&gt;&gt; &amp;pol
-pol mode (i.e. function definitions use \poldef)
-&gt;&gt;&gt; f(x) := x^7 - x^6 - 2x + 1;
-f = x^7-x^6-2*x+1
- --&gt; &amp;GenFloat(f) lets f become usable as function in fp mode
- --&gt; &amp;ROOTS(f) (resp. &amp;ROOTS(f,N)) finds all rational roots exactly and
- all irrational roots with at least 10 (resp. N) fractional digits
-&gt;&gt;&gt; &amp;ROOTS(f)
-Solving for real roots of f and assigning them (please wait...)
-(mult. 1) Rootf_1 = -1.0719678841...
-(mult. 1) Rootf_2 = 0.4962386948...
-(mult. 1) Rootf_3 = 1.3151140860...
-Square-free irrational part: x^7-x^6-2*x+1
- --&gt; &amp;REFINEROOTS(f,N) to extend real irr. roots to N fractional digits
-&gt;&gt;&gt; &amp;REFINEROOTS(f,40)
-Refining real roots of f to 40 digits (please wait...)
-(mult. 1) Rootf_1 = -1.0719678841080266034109100331975342338141...
-(mult. 1) Rootf_2 = 0.4962386948771497344730618510143671567979...
-(mult. 1) Rootf_3 = 1.3151140860165192656960005018679846354234...</pre>
+in particularl root localization is to use it on the command line
+via the <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a> interface. Here is an example:</p>
+<div class="highlight-latex notranslate"><div class="highlight"><pre><span></span><span class="s">$</span><span class="nb"> rlwrap etex xintsession</span>
+<span class="o">[</span><span class="nb">...xintsession welcome message...</span><span class="o">]</span><span class="nb"></span>
+<span class="nb">Starting in exact mode </span><span class="o">(</span><span class="nb">floating point evaluations use </span><span class="m">16</span><span class="nb"> digits</span><span class="o">)</span><span class="nb"></span>
+<span class="nb">&gt;&gt;&gt; &amp;pol</span>
+<span class="nb">pol mode </span><span class="o">(</span><span class="nb">i.e. function definitions use </span><span class="nv">\poldef</span><span class="o">)</span><span class="nb"></span>
+<span class="nb">&gt;&gt;&gt; f</span><span class="o">(</span><span class="nb">x</span><span class="o">)</span><span class="nb"> :</span><span class="o">=</span><span class="nb"> x^</span><span class="m">7</span><span class="nb"> </span><span class="o">-</span><span class="nb"> x^</span><span class="m">6</span><span class="nb"> </span><span class="o">-</span><span class="nb"> </span><span class="m">2</span><span class="nb">x </span><span class="o">+</span><span class="nb"> </span><span class="m">1</span><span class="nb">;</span>
+<span class="nb">f </span><span class="o">=</span><span class="nb"> x^</span><span class="m">7</span><span class="o">-</span><span class="nb">x^</span><span class="m">6</span><span class="o">-</span><span class="m">2</span><span class="o">*</span><span class="nb">x</span><span class="o">+</span><span class="m">1</span><span class="nb"></span>
+<span class="nb"> </span><span class="o">--</span><span class="nb">&gt; &amp;GenFloat</span><span class="o">(</span><span class="nb">f</span><span class="o">)</span><span class="nb"> lets f become usable as function in fp mode</span>
+<span class="nb"> </span><span class="o">--</span><span class="nb">&gt; &amp;ROOTS</span><span class="o">(</span><span class="nb">f</span><span class="o">)</span><span class="nb"> </span><span class="o">(</span><span class="nb">resp. &amp;ROOTS</span><span class="o">(</span><span class="nb">f,N</span><span class="o">))</span><span class="nb"> finds all rational roots exactly and</span>
+<span class="nb"> all irrational roots with at least </span><span class="m">10</span><span class="nb"> </span><span class="o">(</span><span class="nb">resp. N</span><span class="o">)</span><span class="nb"> fractional digits</span>
+<span class="nb">&gt;&gt;&gt; &amp;ROOTS</span><span class="o">(</span><span class="nb">f</span><span class="o">)</span><span class="nb"></span>
+<span class="nb">Solving for real roots of f and assigning them </span><span class="o">(</span><span class="nb">please wait...</span><span class="o">)</span><span class="nb"></span>
+<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">1</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="o">-</span><span class="m">1</span><span class="nb">.</span><span class="m">0719678841</span><span class="nb">...</span>
+<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">2</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="m">0</span><span class="nb">.</span><span class="m">4962386948</span><span class="nb">...</span>
+<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">3</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="m">1</span><span class="nb">.</span><span class="m">3151140860</span><span class="nb">...</span>
+<span class="nb">Square</span><span class="o">-</span><span class="nb">free irrational part: x^</span><span class="m">7</span><span class="o">-</span><span class="nb">x^</span><span class="m">6</span><span class="o">-</span><span class="m">2</span><span class="o">*</span><span class="nb">x</span><span class="o">+</span><span class="m">1</span><span class="nb"></span>
+<span class="nb"> </span><span class="o">--</span><span class="nb">&gt; &amp;REFINEROOTS</span><span class="o">(</span><span class="nb">f,N</span><span class="o">)</span><span class="nb"> to extend real irr. roots to N fractional digits</span>
+<span class="nb">&gt;&gt;&gt; &amp;REFINEROOTS</span><span class="o">(</span><span class="nb">f,</span><span class="m">40</span><span class="o">)</span><span class="nb"></span>
+<span class="nb">Refining real roots of f to </span><span class="m">40</span><span class="nb"> digits </span><span class="o">(</span><span class="nb">please wait...</span><span class="o">)</span><span class="nb"></span>
+<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">1</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="o">-</span><span class="m">1</span><span class="nb">.</span><span class="m">0719678841080266034109100331975342338141</span><span class="nb">...</span>
+<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">2</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="m">0</span><span class="nb">.</span><span class="m">4962386948771497344730618510143671567979</span><span class="nb">...</span>
+<span class="o">(</span><span class="nb">mult. </span><span class="m">1</span><span class="o">)</span><span class="nb"> Rootf_</span><span class="m">3</span><span class="nb"> </span><span class="o">=</span><span class="nb"> </span><span class="m">1</span><span class="nb">.</span><span class="m">3151140860165192656960005018679846354234</span><span class="nb">...</span>
+</pre></div>
+</div>
<p>The <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a> interface allows to define polynomial variables via its
-<span class="docutils literal">&amp;pol</span> mode. It also exposes <a class="reference internal" href="#polexpr08">all polynomial functions added to the
-xintexpr syntax</a> by <span class="docutils literal">polexpr</span>. Further, as seen in the
-example above it also covers some of the <span class="docutils literal">polexpr</span> capabilities
+<code class="docutils literal notranslate"><span class="pre">&amp;pol</span></code> mode. It also exposes <a class="reference internal" href="polexpr-ref.html#polexpr08"><span class="std std-ref">all polynomial functions added to the
+xintexpr syntax</span></a> by <code class="docutils literal notranslate"><span class="pre">polexpr</span></code>. Further, as seen in the
+example above it also covers some of the <code class="docutils literal notranslate"><span class="pre">polexpr</span></code> capabilities
currently implemented via user macros. This is to be considered a work
-in progress, the above <span class="docutils literal">&amp;ROOTS</span> and <span class="docutils literal">&amp;REFINEROOTS</span> may be renamed
+in progress, the above <code class="docutils literal notranslate"><span class="pre">&amp;ROOTS</span></code> and <code class="docutils literal notranslate"><span class="pre">&amp;REFINEROOTS</span></code> may be renamed
into something else, and may have been so already since this
documentation was written.</p>
-<p>Any input on the command line at the <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a> <span class="docutils literal">&gt;&gt;&gt;</span> prompt which
+<p>Any input on the command line at the <a class="reference external" href="https://www.ctan.org/pkg/xintsession">xintsession</a> <code class="docutils literal notranslate"><span class="pre">&gt;&gt;&gt;</span></code> prompt which
starts with a backslash is executed as TeX macros, so all macros of
-<span class="docutils literal">polexpr</span> are in fact already available, including those typesetting
+<code class="docutils literal notranslate"><span class="pre">polexpr</span></code> are in fact already available, including those typesetting
material in background of the interactive session on command line. The
-<span class="docutils literal">&amp;ROOTS</span> and <span class="docutils literal">&amp;REFINEROOTS</span> direct their outputs to the
+<code class="docutils literal notranslate"><span class="pre">&amp;ROOTS</span></code> and <code class="docutils literal notranslate"><span class="pre">&amp;REFINEROOTS</span></code> direct their outputs to the
terminal rather than to the TeX page as would the typesetting macros
-defined by <span class="docutils literal">polexpr</span> itself.</p>
-<div class="contents topic" id="contents">
-<p class="topic-title">Contents</p>
-<ul class="simple">
-<li><p><a class="reference internal" href="#introduction" id="id35">Introduction</a></p></li>
-<li><p><a class="reference internal" href="#examples-of-root-localization" id="id36">Examples of root localization</a></p></li>
-<li><p><a class="reference internal" href="#usage-via-xintsession" id="id37">Usage via xintsession</a></p></li>
-<li><p><a class="reference internal" href="#quick-syntax-overview" id="id38">Quick syntax overview</a></p></li>
-<li><p><a class="reference internal" href="#the-polexpr-0-8-extensions-to-the-xintexpr-syntax" id="id39">The polexpr <span class="docutils literal">0.8</span> extensions to the <span class="docutils literal">\xintexpr</span> syntax</a></p>
-<ul>
-<li><p><a class="reference internal" href="#warning-about-unstability-of-the-new-syntax" id="id40">Warning about unstability of the new syntax</a></p></li>
-<li><p><a class="reference internal" href="#infix-operators" id="id41">Infix operators <span class="docutils literal">+, <span class="pre">-,</span> *, /, **, ^</span></a></p></li>
-<li><p><a class="reference internal" href="#experimental-infix-operators" id="id42">Experimental infix operators <span class="docutils literal">//, /:</span></a></p></li>
-<li><p><a class="reference internal" href="#comparison-operators" id="id43">Comparison operators <span class="docutils literal">&lt;, &gt;, &lt;=, &gt;=, ==, !=</span></a></p></li>
-<li><p><a class="reference internal" href="#pol-nutple-expression" id="id44"><span class="docutils literal"><span class="pre">pol(&lt;nutple</span> expression&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#lpol-nutple-expression" id="id45"><span class="docutils literal"><span class="pre">lpol(&lt;nutple</span> expression&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#xinteval-pol-expr" id="id46"><span class="docutils literal"><span class="pre">\xinteval{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#evalp-pol-expr-pol-expr" id="id47"><span class="docutils literal"><span class="pre">evalp(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;pol. expr&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#deg-pol-expr" id="id48"><span class="docutils literal"><span class="pre">deg(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#coeffs-pol-expr" id="id49"><span class="docutils literal"><span class="pre">coeffs(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#lcoeffs-pol-expr" id="id50"><span class="docutils literal"><span class="pre">lcoeffs(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#coeff-pol-expr-num-expr" id="id51"><span class="docutils literal"><span class="pre">coeff(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;num. <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#lc-pol-expr" id="id52"><span class="docutils literal"><span class="pre">lc(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#monicpart-pol-expr" id="id53"><span class="docutils literal"><span class="pre">monicpart(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#cont-pol-expr" id="id54"><span class="docutils literal"><span class="pre">cont(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#primpart-pol-expr" id="id55"><span class="docutils literal"><span class="pre">primpart(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#quorem-pol-expr-pol-expr" id="id56"><span class="docutils literal"><span class="pre">quorem(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;pol. <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#quo-pol-expr-pol-expr" id="id57"><span class="docutils literal"><span class="pre">quo(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;pol. <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#rem-pol-expr-pol-expr" id="id58"><span class="docutils literal"><span class="pre">rem(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;pol. <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#prem-pol-expr-1-pol-expr-2" id="id59"><span class="docutils literal"><span class="pre">prem(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#divmod-pol-expr-1-pol-expr-2" id="id60"><span class="docutils literal"><span class="pre">divmod(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#mod-pol-expr-1-pol-expr-2" id="id61"><span class="docutils literal"><span class="pre">mod(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#polgcd-pol-expr-1-pol-expr-2" id="id62"><span class="docutils literal"><span class="pre">polgcd(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;, <span class="pre">...)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#resultant-pol-expr-1-pol-expr-2" id="id63"><span class="docutils literal"><span class="pre">resultant(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#disc-pol-expr" id="id64"><span class="docutils literal"><span class="pre">disc(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polpowmod-pol-expr-1-num-expr-pol-expr-2" id="id65"><span class="docutils literal"><span class="pre">polpowmod(&lt;pol.</span> expr. 1&gt;, &lt;num. <span class="pre">expr.&gt;,</span> &lt;pol. expr. 2&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#rdcoeffs-pol-expr" id="id66"><span class="docutils literal"><span class="pre">rdcoeffs(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#rdzcoeffs-pol-expr" id="id67"><span class="docutils literal"><span class="pre">rdzcoeffs(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#diff1-pol-expr" id="id68"><span class="docutils literal"><span class="pre">diff1(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#diff2-pol-expr" id="id69"><span class="docutils literal"><span class="pre">diff2(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></p></li>
-<li><p><a class="reference internal" href="#diffn-pol-expr-p-num-expr-n" id="id70"><span class="docutils literal"><span class="pre">diffn(&lt;pol.</span> expr. P&gt;, &lt;num. expr. n&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#antider-pol-expr-p" id="id71"><span class="docutils literal"><span class="pre">antider(&lt;pol.</span> expr. P&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#intfrom-pol-expr-p-pol-expr-c" id="id72"><span class="docutils literal"><span class="pre">intfrom(&lt;pol.</span> expr. P&gt;, &lt;pol. expr. c&gt;)</span></a></p></li>
-<li><p><a class="reference internal" href="#integral-pol-expr-p-pol-expr-a-pol-expr-b" id="id73"><span class="docutils literal"><span class="pre">integral(&lt;pol.</span> expr. P&gt;, [&lt;pol. expr. a&gt;, &lt;pol. expr. <span class="pre">b&gt;])</span></span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#non-expandable-macros" id="id74">Non-expandable macros</a></p>
-<ul>
-<li><p><a class="reference internal" href="#poldef-polname-letter-expression-using-the-letter-as-indeterminate" id="id75"><span class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression using the letter as indeterminate;</span></a></p></li>
-<li><p><a class="reference internal" href="#poldef-letter-polname-expr-using-the-letter-as-indeterminate" id="id76"><span class="docutils literal"><span class="pre">\PolDef[&lt;letter&gt;]{&lt;polname&gt;}{&lt;expr.</span> using the letter as indeterminate&gt;}</span></a></p></li>
-<li><p><a class="reference internal" href="#polgenfloatvariant-polname" id="id77"><span class="docutils literal"><span class="pre">\PolGenFloatVariant{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltypeset-pol-expr" id="id78"><span class="docutils literal"><span class="pre">\PolTypeset{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></p>
-<ul>
-<li><p><a class="reference internal" href="#poltypesetcmd-raw-coeff" id="id79"><span class="docutils literal"><span class="pre">\PolTypesetCmd{&lt;raw_coeff&gt;}</span></span></a></p>
-<ul>
-<li><p><a class="reference internal" href="#polifcoeffisplusorminusone-t-f" id="id80"><span class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{T}{F}</span></span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#poltypesetone-raw-coeff" id="id81"><span class="docutils literal"><span class="pre">\PolTypesetOne{&lt;raw_coeff&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id9" id="id82"><span class="docutils literal">\PolTypesetMonomialCmd</span></a></p></li>
-<li><p><a class="reference internal" href="#poltypesetcmdprefix-raw-coeff" id="id83"><span class="docutils literal"><span class="pre">\PolTypesetCmdPrefix{&lt;raw_coeff&gt;}</span></span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#id11" id="id84"><span class="docutils literal"><span class="pre">\PolTypeset*{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#non-expandable-macros-related-to-the-root-localization-routines" id="id85">Non-expandable macros related to the root localization routines</a></p>
-<ul>
-<li><p><a class="reference internal" href="#poltosturm-polname-sturmname" id="id86"><span class="docutils literal"><span class="pre">\PolToSturm{&lt;polname&gt;}{&lt;sturmname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id13" id="id87"><span class="docutils literal"><span class="pre">\PolToSturm*{&lt;polname&gt;}{&lt;sturmname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatezeros-sturmname" id="id88"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros{&lt;sturmname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id15" id="id89"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{&lt;sturmname&gt;}</span></span></a></p>
-<ul>
-<li><p><a class="reference internal" href="#polsturmisolatezerosandgetmultiplicities-sturmname" id="id90"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndGetMultiplicities{&lt;sturmname&gt;}</span></span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#id17" id="id91"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</span></span></a></p>
-<ul>
-<li><p><a class="reference internal" href="#polsturmisolatezerosgetmultiplicitiesandrationalroots-sturmname" id="id92"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{&lt;sturmname&gt;}</span></span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#polsturmisolatezerosandfindrationalroots-sturmname" id="id93"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndFindRationalRoots{&lt;sturmname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polrefineinterval-sturmname-index" id="id94"><span class="docutils literal"><span class="pre">\PolRefineInterval*{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polrefineinterval-n-sturmname-index" id="id95"><span class="docutils literal"><span class="pre">\PolRefineInterval[N]{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polensureintervallength-sturmname-index-exponent" id="id96"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLength{&lt;sturmname&gt;}{&lt;index&gt;}{&lt;exponent&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polensureintervallengths-sturmname-exponent" id="id97"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{&lt;sturmname&gt;}{&lt;exponent&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervals-varname-sturmname" id="id98"><span class="docutils literal"><span class="pre">\PolPrintIntervals[&lt;varname&gt;]{&lt;sturmname&gt;}</span></span></a></p>
-<ul>
-<li><p><a class="reference internal" href="#polprintintervalsnorealroots" id="id99"><span class="docutils literal">\PolPrintIntervalsNoRealRoots</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsbeginenv" id="id100"><span class="docutils literal">\PolPrintIntervalsBeginEnv</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsendenv" id="id101"><span class="docutils literal">\PolPrintIntervalsEndEnv</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsrowseparator" id="id102"><span class="docutils literal">\PolPrintIntervalsRowSeparator</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsknownroot" id="id103"><span class="docutils literal">\PolPrintIntervalsKnownRoot</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsunknownroot" id="id104"><span class="docutils literal">\PolPrintIntervalsUnknownRoot</span></a></p></li>
-<li><p><a class="reference internal" href="#id18" id="id105"><span class="docutils literal">\PolPrintIntervalsPrintExactZero</span></a></p></li>
-<li><p><a class="reference internal" href="#id19" id="id106"><span class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</span></a></p></li>
-<li><p><a class="reference internal" href="#id20" id="id107"><span class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#id22" id="id108"><span class="docutils literal"><span class="pre">\PolPrintIntervals*[&lt;varname&gt;]{&lt;sturmname&gt;}</span></span></a></p>
-<ul>
-<li><p><a class="reference internal" href="#polprintintervalsprintmultiplicity" id="id109"><span class="docutils literal">\PolPrintIntervalsPrintMultiplicity</span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#polsettosturmchainsignchangesat-foo-sturmname-value" id="id110"><span class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\foo}{&lt;sturmname&gt;}{&lt;value&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsettonbofzeroswithin-foo-sturmname-value-left-value-right" id="id111"><span class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\foo}{&lt;sturmname&gt;}{&lt;value_left&gt;}{&lt;value_right&gt;}</span></span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#pollet-polname-2-polname-1" id="id112"><span class="docutils literal"><span class="pre">\PolLet{&lt;polname_2&gt;}={&lt;polname_1&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polgloballet-polname-2-polname-1" id="id113"><span class="docutils literal"><span class="pre">\PolGlobalLet{&lt;polname_2&gt;}={&lt;polname_1&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polassign-polname-toarray-macro" id="id114"><span class="docutils literal"><span class="pre">\PolAssign{&lt;polname&gt;}\toarray\macro</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polget-polname-fromarray-macro" id="id115"><span class="docutils literal"><span class="pre">\PolGet{&lt;polname&gt;}\fromarray\macro</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polfromcsv-polname-csv" id="id116"><span class="docutils literal"><span class="pre">\PolFromCSV{&lt;polname&gt;}{&lt;csv&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polmapcoeffs-macro-polname" id="id117"><span class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polreducecoeffs-polname" id="id118"><span class="docutils literal"><span class="pre">\PolReduceCoeffs{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id24" id="id119"><span class="docutils literal"><span class="pre">\PolReduceCoeffs*{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polmakemonic-polname" id="id120"><span class="docutils literal"><span class="pre">\PolMakeMonic{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polmakeprimitive-polname" id="id121"><span class="docutils literal"><span class="pre">\PolMakePrimitive{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poldiff-polname-1-polname-2" id="id122"><span class="docutils literal"><span class="pre">\PolDiff{&lt;polname_1&gt;}{&lt;polname_2&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poldiff-n-polname-1-polname-2" id="id123"><span class="docutils literal"><span class="pre">\PolDiff[N]{&lt;polname_1&gt;}{&lt;polname_2&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polantidiff-polname-1-polname-2" id="id124"><span class="docutils literal"><span class="pre">\PolAntiDiff{&lt;polname_1&gt;}{&lt;polname_2&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polantidiff-n-polname-1-polname-2" id="id125"><span class="docutils literal"><span class="pre">\PolAntiDiff[N]{&lt;polname_1&gt;}{&lt;polname_2&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poldivide-polname-1-polname-2-polname-q-polname-r" id="id126"><span class="docutils literal"><span class="pre">\PolDivide{&lt;polname_1&gt;}{&lt;polname_2&gt;}{&lt;polname_Q&gt;}{&lt;polname_R&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polquo-polname-1-polname-2-polname-q" id="id127"><span class="docutils literal"><span class="pre">\PolQuo{&lt;polname_1&gt;}{&lt;polname_2&gt;}{&lt;polname_Q&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polrem-polname-1-polname-2-polname-r" id="id128"><span class="docutils literal"><span class="pre">\PolRem{&lt;polname_1&gt;}{&lt;polname_2&gt;}{&lt;polname_R&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polgcd-polname-1-polname-2-polname-gcd" id="id129"><span class="docutils literal"><span class="pre">\PolGCD{&lt;polname_1&gt;}{&lt;polname_2&gt;}{&lt;polname_GCD&gt;}</span></span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#expandable-macros" id="id130">Expandable macros</a></p>
-<ul>
-<li><p><a class="reference internal" href="#poltoexpr-pol-expr" id="id131"><span class="docutils literal"><span class="pre">\PolToExpr{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></p>
-<ul>
-<li><p><a class="reference internal" href="#id27" id="id132"><span class="docutils literal">\PolToExprVar</span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprinvar" id="id133"><span class="docutils literal">\PolToExprInVar</span></a></p></li>
-<li><p><a class="reference internal" href="#id28" id="id134"><span class="docutils literal">\PolToExprTimes</span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprcaret" id="id135"><span class="docutils literal">\PolToExprCaret</span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprcmd-raw-coeff" id="id136"><span class="docutils literal"><span class="pre">\PolToExprCmd{&lt;raw_coeff&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexproneterm-raw-coeff-exponent" id="id137"><span class="docutils literal"><span class="pre">\PolToExprOneTerm{&lt;raw_coeff&gt;}{&lt;exponent&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexpronetermstylea-raw-coeff-exponent" id="id138"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{&lt;raw_coeff&gt;}{&lt;exponent&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexpronetermstyleb-raw-coeff-exponent" id="id139"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{&lt;raw_coeff&gt;}{&lt;exponent&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprtermprefix-raw-coeff" id="id140"><span class="docutils literal"><span class="pre">\PolToExprTermPrefix{&lt;raw_coeff&gt;}</span></span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#poltofloatexpr-pol-expr" id="id141"><span class="docutils literal"><span class="pre">\PolToFloatExpr{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></p>
-<ul>
-<li><p><a class="reference internal" href="#poltofloatexproneterm-raw-coeff-exponent" id="id142"><span class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{&lt;raw_coeff&gt;}{&lt;exponent&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltofloatexprcmd-raw-coeff" id="id143"><span class="docutils literal"><span class="pre">\PolToFloatExprCmd{&lt;raw_coeff&gt;}</span></span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#id30" id="id144"><span class="docutils literal"><span class="pre">\PolToExpr*{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#id32" id="id145"><span class="docutils literal"><span class="pre">\PolToFloatExpr*{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polnthcoeff-polname-index" id="id146"><span class="docutils literal"><span class="pre">\PolNthCoeff{&lt;polname&gt;}{&lt;index&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polleadingcoeff-polname" id="id147"><span class="docutils literal"><span class="pre">\PolLeadingCoeff{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poldegree-polname" id="id148"><span class="docutils literal"><span class="pre">\PolDegree{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#policontent-polname" id="id149"><span class="docutils literal"><span class="pre">\PolIContent{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltolist-polname" id="id150"><span class="docutils literal"><span class="pre">\PolToList{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poltocsv-polname" id="id151"><span class="docutils literal"><span class="pre">\PolToCSV{&lt;polname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poleval-polname-atexpr-num-expr" id="id152"><span class="docutils literal"><span class="pre">\PolEval{&lt;polname&gt;}\AtExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#poleval-polname-at-value" id="id153"><span class="docutils literal"><span class="pre">\PolEval{&lt;polname&gt;}\At{&lt;value&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polevalreduced-polname-atexpr-num-expr" id="id154"><span class="docutils literal"><span class="pre">\PolEvalReduced{&lt;polname&gt;}\AtExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polevalreduced-polname-at-value" id="id155"><span class="docutils literal"><span class="pre">\PolEvalReduced{&lt;polname&gt;}\At{&lt;value&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polfloateval-polname-atexpr-num-expr" id="id156"><span class="docutils literal"><span class="pre">\PolFloatEval{&lt;polname&gt;}\AtExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polfloateval-polname-at-value" id="id157"><span class="docutils literal"><span class="pre">\PolFloatEval{&lt;polname&gt;}\At{&lt;value&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#expandable-macros-related-to-the-root-localization-routines" id="id158">Expandable macros related to the root localization routines</a></p>
-<ul>
-<li><p><a class="reference internal" href="#polsturmchainlength-sturmname" id="id159"><span class="docutils literal"><span class="pre">\PolSturmChainLength{&lt;sturmname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmifzeroexactlyknown-sturmname-index-t-f" id="id160"><span class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{&lt;sturmname&gt;}{&lt;index&gt;}{T}{F}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatedzeroleft-sturmname-index" id="id161"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatedzeroright-sturmname-index" id="id162"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index" id="id163"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofisolatedzeros-sturmname" id="id164"><span class="docutils literal"><span class="pre">\PolSturmNbOfIsolatedZeros{&lt;sturmname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value" id="id165"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualTo{&lt;value&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-num-expr" id="id166"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualToExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value" id="id167"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualTo{&lt;value&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequaltoexpr-num-expr" id="id168"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualToExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrationalroots-sturmname" id="id169"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRoots{&lt;sturmname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrationalrootswithmultiplicities-sturmname" id="id170"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRootsWithMultiplicities{&lt;sturmname&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmrationalroot-sturmname-k" id="id171"><span class="docutils literal"><span class="pre">\PolSturmRationalRoot{&lt;sturmname&gt;}{&lt;k&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmrationalrootindex-sturmname-k" id="id172"><span class="docutils literal"><span class="pre">\PolSturmRationalRootIndex{&lt;sturmname&gt;}{&lt;k&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polsturmrationalrootmultiplicity-sturmname-k" id="id173"><span class="docutils literal"><span class="pre">\PolSturmRationalRootMultiplicity{&lt;sturmname&gt;}{&lt;k&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#polintervalwidth-sturmname-index" id="id174"><span class="docutils literal"><span class="pre">\PolIntervalWidth{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></p></li>
-<li><p><a class="reference internal" href="#expandable-macros-for-use-within-execution-of-polprintintervals" id="id175">Expandable macros for use within execution of <span class="docutils literal">\PolPrintIntervals</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthevar" id="id176"><span class="docutils literal">\PolPrintIntervalsTheVar</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalstheindex" id="id177"><span class="docutils literal">\PolPrintIntervalsTheIndex</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthesturmname" id="id178"><span class="docutils literal">\PolPrintIntervalsTheSturmName</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalstheleftendpoint" id="id179"><span class="docutils literal">\PolPrintIntervalsTheLeftEndPoint</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalstherightendpoint" id="id180"><span class="docutils literal">\PolPrintIntervalsTheRightEndPoint</span></a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthemultiplicity" id="id181"><span class="docutils literal">\PolPrintIntervalsTheMultiplicity</span></a></p></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#booleans-with-default-setting-as-indicated" id="id182">Booleans (with default setting as indicated)</a></p>
-<ul>
-<li><p><a class="reference internal" href="#xintverbosefalse" id="id183"><span class="docutils literal">\xintverbosefalse</span></a></p></li>
-<li><p><a class="reference internal" href="#polnewpolverbosefalse" id="id184"><span class="docutils literal">\polnewpolverbosefalse</span></a></p></li>
-<li><p><a class="reference internal" href="#poltypesetallfalse" id="id185"><span class="docutils literal">\poltypesetallfalse</span></a></p></li>
-<li><p><a class="reference internal" href="#poltoexprallfalse" id="id186"><span class="docutils literal">\poltoexprallfalse</span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#utilies" id="id187">Utilies</a></p>
-<ul>
-<li><p><a class="reference internal" href="#poldectostring-decimal-number" id="id188"><span class="docutils literal">\PolDecToString{decimal number}</span></a></p></li>
-<li><p><a class="reference internal" href="#polexprsetup" id="id189"><span class="docutils literal">\polexprsetup</span></a></p></li>
-</ul>
-</li>
-<li><p><a class="reference internal" href="#technicalities" id="id190">Technicalities</a></p></li>
-<li><p><a class="reference internal" href="#change-log" id="id191">CHANGE LOG</a></p></li>
-<li><p><a class="reference internal" href="#acknowledgments" id="id192">Acknowledgments</a></p></li>
-</ul>
-</div>
-</div>
-<div class="section" id="quick-syntax-overview">
-<h1><a class="toc-backref" href="#id38">Quick syntax overview</a></h1>
-<p>The syntax to define a new polynomial is:</p>
-<pre class="literal-block">\poldef polname(x):= expression in variable x;</pre>
-<p>The package is focused on exact computations, so this expression will be
-parsed by the services of <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> and accept arbitrarily big integers
-or fractions.</p>
-<p>If you are interested into numerical evaluations, for example for
-plotting, it is advisable to use the <span class="docutils literal"><span class="pre">\xintfloatexpr/\xintfloateval</span></span>
-context, as exact evaluations will quickly lead to manipulating numbers
-with dozens of digits (when the number of digits exceeds five hundreds,
-computation with <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> will become noticeably too slow, if many
-evaluations need to be done). For the polynomial to be usable as a function in
-floating point context, an extra step beyond <span class="docutils literal">\poldef</span> is required:
-see <a class="reference internal" href="#polgenfloatvariant">\PolGenFloatVariant</a>.</p>
-<p>As a rule, the functionalities such as getting the degree, or getting
-one coefficient, or taking derivatives, etc..., i.e. anything which
-handles the polynomial as an entity and not only as a numerical
-function, are only available in the <span class="docutils literal"><span class="pre">\poldef/\xintexpr/\xinteval</span></span>
-context. The <a class="reference internal" href="#polgenfloatvariant">\PolGenFloatVariant</a> must be used each time the
-polynomial gets modified or a new polynomial created out of it, if
-continuing computations in <span class="docutils literal">\xintfloatexpr</span> are to follow. But (see
-<a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation) one can always use a sub-expression such as
-<span class="docutils literal">\xintexpr <span class="pre">deg(P)\relax</span></span> as sub-component inside a
-<span class="docutils literal"><span class="pre">\xintfloatexpr/\xintfloateval</span></span>.</p>
-<p>Conversely if perhaps the coefficients of your polynomial have become
-too gigantic and you would like to replace them with some approximation
-to keep on working in <span class="docutils literal">\xinteval</span>, not necessarily <span class="docutils literal">\xintfloateval</span>,
-see <a class="reference internal" href="#polmapcoeffs">\PolMapCoeffs</a> which can be used for example with <span class="docutils literal">\xintFloat</span>
-macro to make the float-rounding applied to the exact coefficients.</p>
-<ul>
-<li><p>In place of <span class="docutils literal">x</span> an arbitrary <em>dummy variable</em> is authorized,
-i.e. per default one <span class="docutils literal">a, .., z, A, .., Z</span> (more letters can be declared
-under Unicode engines).</p></li>
-<li><p><span class="docutils literal">polname</span> consists of letters, digits, and the <span class="docutils literal">_</span> and <span class="docutils literal">'</span>
-characters. It <strong>must</strong> start with a letter: do not use the
-underscore <span class="docutils literal">_</span> as <em>first character</em> of a polynomial name (even
-if of catcode letter). No warning is emitted but dire consequences
-will result.</p>
-<div class="admonition hint">
-<p class="admonition-title">Hint</p>
-<p>The <span class="docutils literal">&#64;</span> is usable too, independently of whether it is of catcode
-letter or other. This has always been the case, but was not
-documented by polexpr prior to <span class="docutils literal">0.8</span>, as the author has never
-found the time to provide some official guidelines on how to name
-temporary variables and the <span class="docutils literal">&#64;</span> is used already as such internally
-to package; time has still not yet been found for <span class="docutils literal">0.8</span> to review
-the situation but it seems reasonable to recommend at any rate to
-restrict usage of <span class="docutils literal">&#64;</span> to scratch variables of defined macros and
-to avoid using it to name document variable.</p>
-</div>
-</li>
-<li><p>The colon before the equality sign is optional and its (reasonable)
-catcode does not matter.</p></li>
-<li><p>The semi-colon at the end of the expression is mandatory. Some
-contexts (such as (pdf)LaTeX with babel+frenchb) modify its catcode.
-If at top level, <span class="docutils literal">\poldef</span> resets temporarily the semi-colon catcode
-before fetching the expression, so is immune to this. There is also
-naturally no problem either if <span class="docutils literal">\poldef</span> is used in the replacement
-text of some other macro which is defined at a time the <span class="docutils literal">;</span> has its
-standard catcode, as is the case in LaTeX in the document preamble,
-even with babel+french loaded.</p>
-<p>The semi-colon intervenes in certain <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> syntax elements, within
-parentheses. This (except if the inner semi-colons are hidden within
-braces: <span class="docutils literal">{;}</span>) will break <span class="docutils literal">\poldef</span> which, contrarily to
-<a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>'s <span class="docutils literal">\xintdefvar</span>, does not balance parentheses when
-fetching the semi-colon delimited polynomial expression.</p>
-</li>
-</ul>
-<p>Problems with the semi-colon are avoided via an alternative syntax:</p>
-<pre class="literal-block">\PolDef[optional letter]{&lt;polname&gt;}{&lt;expr. using letter as indeterminate&gt;}</pre>
-<p>The <span class="docutils literal">\PolDef</span> optional first argument defaults to <span class="docutils literal">x</span> and must be
-used as the indeterminate in the expression.</p>
-<p><span class="docutils literal">\poldef <span class="pre">f(x):=</span> 1 - x + quo(x^5,1 - x + x^2);</span></p>
-<dl>
-<dt><span class="docutils literal"><span class="pre">\PolDef{f}{1</span> - x + quo(x^5,1 - x + x^2)}</span></dt>
-<dd><p>Both parse the polynomial
-expression, and convert it internally (currently) to the list
-of its coefficients from the constant term to the highest degree
-term.</p>
-<p>The polynomial can then be used in further polynomial definitions or
-serve as argument to package macros, or as a variable in various
-functions which will be <a class="reference internal" href="#polexpr08">described later</a>.</p>
-</dd>
-</dl>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p>Euclidean quotient is mapped to the function <span class="docutils literal">quo()</span> (as shown
-in the example above), but
-for backwards compatibility one can currently still use the <span class="docutils literal">/</span>
-infix operator:</p>
-<pre class="literal-block">\poldef f(x):= 1 - x + x^5/(1 - x + x^2);</pre>
-<p>Due to precedence rules the first operand is <span class="docutils literal">x^5</span>, not of course
-<span class="docutils literal"><span class="pre">1-x+x^5</span></span>.</p>
-<p>Note that <span class="docutils literal"><span class="pre">(1-x^2)/(1-x)</span></span> produces <span class="docutils literal">1+x</span>
-but <span class="docutils literal"><span class="pre">(1/(1-x))*(1-x^2)</span></span> produces zero! One also has to be aware
-of some precedence rules, for example:</p>
-<pre class="literal-block">\poldef k(x):= (x-1)(x-2)(x-3)(x-4)/(x^2-5x+4);</pre>
-<p>does compute a degree 2 polynomial because the tacit multiplication
-ties more than the division operator.</p>
-<p>In short, it is safer to use the <span class="docutils literal">quo()</span> function which avoids
-surprises.</p>
-</div>
-<div class="admonition attention" id="warningtacit">
-<p class="admonition-title">Attention!</p>
-<p>Tacit multiplication means that
-<span class="docutils literal">1/2 x^2</span> skips the space and is treated like <span class="docutils literal"><span class="pre">1/(2*x^2)</span></span>.
-But then it gives zero!</p>
-<p>Thus one must use <span class="docutils literal">(1/2)x^2</span> or <span class="docutils literal">1/2*x^2</span> or
-<span class="docutils literal"><span class="pre">(1/2)*x^2</span></span> for disambiguation: <span class="docutils literal">x - 1/2*x^2 + <span class="pre">1/3*x^3...</span></span>. It is
-simpler to move the denominator to the right: <span class="docutils literal">x - x^2/2 + x^3/3 - ...</span>.</p>
-<p>It is worth noting that <span class="docutils literal"><span class="pre">1/2(x-1)(x-2)</span></span> suffers the same issue:
-<a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>'s tacit multiplication always &quot;ties more&quot;, hence this
-gets interpreted as <span class="docutils literal"><span class="pre">1/(2*(x-1)*(x-2))</span></span> which gives zero by
-polynomial division. Thus, use in such cases one of
-<span class="docutils literal"><span class="pre">(1/2)(x-1)(x-2)</span></span>, <span class="docutils literal"><span class="pre">1/2*(x-1)(x-2)</span></span> or <span class="docutils literal"><span class="pre">(x-1)(x-2)/2</span></span>.</p>
-</div>
-<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p>The package does not currently know rational functions, but in order
-to leave open this as a future possibility, the usage of <span class="docutils literal">/</span> to stand
-for the
-euclidean quotient is <strong>deprecated</strong>.</p>
-<p>Please start using rather the <span class="docutils literal">quo()</span> function. It is possible
-that in a future major release <span class="docutils literal">A/B</span> with <span class="docutils literal">B</span> a non-scalar will
-raise an error. Or, who knows, rational functions will be
-implemented sometime during the next decades, and then <span class="docutils literal">A/B</span> will
-naturally be the rational function.</p>
-</div>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p><span class="docutils literal">\poldef <span class="pre">P(x):=...;</span></span> defines <span class="docutils literal">P</span> both as a <em>function</em>,
-to be used as:</p>
-<pre class="literal-block">P(..numeric or even polynomial expression..)</pre>
-<p>and as a <em>variable</em> which can used inside polynomial expressions or
-as argument to some polynomial specific functions such as <span class="docutils literal">deg()</span>
-or <span class="docutils literal">polgcd()</span> <a class="footnote-reference brackets" href="#id3" id="id2">1</a>.</p>
-<dl class="footnote brackets">
-<dt class="label" id="id3"><span class="brackets"><a class="fn-backref" href="#id2">1</a></span></dt>
-<dd><p>Functional syntax accepts expressions as arguments; but the
-TeX <strong>macros</strong> described in the documentation, even the
-expandable ones, work only (there are a few exceptions to the
-general rule) with arguments being <em>names of declared
-polynomials</em>.</p>
-</dd>
-</dl>
-<p>One needs to have a clear understanding of the difference between
-<span class="docutils literal">P</span> used a function and <span class="docutils literal">P</span> used as a variable: if <span class="docutils literal">P</span> and
-<span class="docutils literal">Q</span> are both declared polynomials then:</p>
-<pre class="literal-block">(P+Q)(3)% &lt;--- attention!</pre>
-<p>is currently evaluated as <span class="docutils literal"><span class="pre">(P+Q)*3</span></span>, because <span class="docutils literal">P+Q</span> is not known
-as a <em>function</em>, but <em>only as a variable of polynomial type</em>.
-Even worse:</p>
-<pre class="literal-block">(P)(3)% &lt;--- attention!</pre>
-<p>will compute <span class="docutils literal">P*3</span>, because one can not in current <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> syntax
-enclose a function name in parentheses: consequently it is the variable
-which is used here. There is a <em>meager possibility</em> that in future
-some internal changes to <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> would let <span class="docutils literal"><span class="pre">(P)(3)</span></span> actually
-compute <span class="docutils literal">P(3)</span> and <span class="docutils literal"><span class="pre">(P+Q)(3)</span></span> compute <span class="docutils literal">P(3) + Q(3)</span>, but note
-that <span class="docutils literal"><span class="pre">(P)(P)</span></span> will then do <span class="docutils literal">P(P)</span> and not <span class="docutils literal">P*P</span>,
-the latter, current interpretation, looking more
-intuitive. Anyway, do not rely too extensively on tacit <span class="docutils literal">*</span> and use
-explicit <span class="docutils literal"><span class="pre">(P+Q)*(1+2)</span></span> if this is what is intended.</p>
-<p>As an alternative to explicit <span class="docutils literal"><span class="pre">P(3)+Q(3)</span></span> there is <span class="docutils literal">evalp(P+Q,3)</span>.</p>
-</div>
-<dl>
-<dt><span class="docutils literal"><span class="pre">\PolLet{g}={f}</span></span></dt>
-<dd><p>saves a copy of <span class="docutils literal">f</span> under name <span class="docutils literal">g</span>. Also usable without <span class="docutils literal">=</span>.</p>
-<p>Has exactly the same effect as <span class="docutils literal">\poldef <span class="pre">g(x):=f;</span></span> or <span class="docutils literal">\poldef <span class="pre">g(w):=f(w);</span></span>.</p>
-</dd>
-<dt><span class="docutils literal">\poldef <span class="pre">f(z):=</span> f^2;</span></dt>
-<dd><p>redefines <span class="docutils literal">f</span> in terms of itself. Prior to <span class="docutils literal">0.8</span> one needed
-the right hand side to be <span class="docutils literal"><span class="pre">f(z)^2</span></span>. Also, now <span class="docutils literal">sqr(f)</span> is
-possible (also <span class="docutils literal">sqr(f(x))</span> but not <span class="docutils literal"><span class="pre">sqr(f)(x)</span></span>).</p>
-<p>It may look strange that an indeterminate variable is used on
-left-hand-side even though it may be absent of right-hand-side, as
-it seems to define <span class="docutils literal">f</span> always as a polynomial function.</p>
-<p>This is a legacy of pre-<span class="docutils literal">0.8</span> context.</p>
-</dd>
-</dl>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p>Note that <span class="docutils literal">f^2(z)</span> or <span class="docutils literal"><span class="pre">sqr(f)(z)</span></span> will give a logical but
-perhaps unexpected result: first <span class="docutils literal">f^2</span> is computed, then the
-opening parenthesis is seen which inserts a tacit multiplication
-<span class="docutils literal">*</span>, so in the end it is as if the input had been <span class="docutils literal">f^2 * z</span>.
-Although <span class="docutils literal">f</span> is both a variable and a function, <span class="docutils literal">f^2</span> is
-computed as a polynomial <em>variable</em> and ceases being a function.</p>
-</div>
-<dl>
-<dt><span class="docutils literal">\poldef <span class="pre">f(T):=</span> f(f);</span></dt>
-<dd><p>again modifies <span class="docutils literal">f</span>. Here it is used both as variable and as
-a function. Prior to <span class="docutils literal">0.8</span> it needed to be <span class="docutils literal">f(f(T))</span>.</p>
-</dd>
-<dt><span class="docutils literal">\poldef <span class="pre">k(z):=</span> <span class="pre">f-g(g^2)^2;</span></span></dt>
-<dd><p>if everybody followed, this should now define the zero polynomial...
-And <span class="docutils literal"><span class="pre">f-sqr(g(sqr(g)))</span></span> computes the same thing.</p>
-<p>We can check this in a typeset document like this:</p>
-<pre class="literal-block">\poldef f(x):= 1 - x + quo(x^5,1 - x + x^2);%
-\PolLet{g}={f}%
-\poldef f(z):= f^2;%
-\poldef f(T):= f(f);%
-\poldef k(w):= f-sqr(g(sqr(g)));%
-$$f(x) = \vcenter{\hsize10cm \PolTypeset{f}} $$
-$$g(z) = \PolTypeset{g} $$
-$$k(z) = \PolTypeset{k} $$
-\immediate\write128{f(x)=\PolToExpr{f}}% ah, here we see it also</pre>
-</dd>
-<dt><span class="docutils literal">\poldef <span class="pre">f'(x):=</span> diff1(f);</span></dt>
-<dd><p>(new at <span class="docutils literal">0.8</span>)</p>
-</dd>
-<dt><span class="docutils literal"><span class="pre">\PolDiff{f}{f'}</span></span></dt>
-<dd><p>Both set <span class="docutils literal">f'</span> (or any other chosen name) to the derivative
-of <span class="docutils literal">f</span>.</p>
-</dd>
-</dl>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p>This is not done automatically. If some new definition needs to use
-the derivative of some available polynomial, that derivative
-polynomial must have been previously defined: something such as
-<span class="docutils literal"><span class="pre">f'(3)^2</span></span> will not work without a prior definition of <span class="docutils literal">f'</span>.</p>
-<p>But one can now use <span class="docutils literal">diff1(f)</span> for on-the-spot construction with no
-permanent declaration, so here <span class="docutils literal"><span class="pre">evalp(diff1(f),3)^2</span></span>. And
-<span class="docutils literal"><span class="pre">diff1(f)^2</span></span> is same as <span class="docutils literal"><span class="pre">f'^2</span></span>, assuming here <span class="docutils literal">f'</span> was declared
-to be the derived polynomial.</p>
-<p>Notice that the name <span class="docutils literal">diff1()</span> is experimental and may change. Use
-<span class="docutils literal"><span class="pre">\PolDiff{f}{f'}</span></span> as the stable interface.</p>
-</div>
-<dl>
-<dt><span class="docutils literal">\PolTypeset{P}</span></dt>
-<dd><p>Typesets (switching to math mode if in text mode):</p>
-<pre class="literal-block">\poldef f(x):=(3+x)^5;%
-\PolDiff{f}{f'}\PolDiff{f'}{f''}\PolDiff{f''}{f'''}%
-$$f(z) = \PolTypeset[z]{f} $$
-$$f'(z) = \PolTypeset[z]{f'} $$
-$$f''(z) = \PolTypeset[z]{f''} $$
-$$f'''(z)= \PolTypeset[z]{f'''} $$</pre>
-<p>See <a class="reference internal" href="#poltypeset">the documentation</a> for the configurability
-via macros.</p>
-<p>Since <span class="docutils literal">0.8</span> <a class="reference internal" href="#poltypeset">\PolTypeset</a> accepts directly an
-expression, it does not have to be a pre-declared polynomial name:</p>
-<pre class="literal-block">\PolTypeset{mul(x-i,i=1..5)}</pre>
-</dd>
-<dt><span class="docutils literal">\PolToExpr{P}</span></dt>
-<dd><p>Expandably (contrarily to <a class="reference internal" href="#poltypeset">\PolTypeset</a>)
-produces <span class="docutils literal">c_n*x^n + ... + c_0</span> starting from the leading
-coefficient. The <span class="docutils literal">+</span> signs are omitted if followed by negative
-coefficients.</p>
-<p>This is useful for console or file output. This syntax is Maple and
-PSTricks <span class="docutils literal">\psplot[algebraic]</span> compatible; and also it is
-compatible with <span class="docutils literal">\poldef</span> input syntax, of course. See
-<a class="reference internal" href="#poltoexprcaret">\PolToExprCaret</a> for configuration of the <span class="docutils literal">^</span>, for example to
-use rather <span class="docutils literal">**</span> for Python syntax compliance.</p>
-<p>Changed at <span class="docutils literal">0.8</span>: the <span class="docutils literal">^</span> in output is by default of catcode 12
-so in a draft document one can use <span class="docutils literal">\PolToExpr{P}</span> inside the
-typesetting flow (without requiring math mode, where the <span class="docutils literal">*</span> would
-be funny and <span class="docutils literal">^12</span> would only put the <span class="docutils literal">1</span> as exponent anyhow;
-but arguably in text mode the <span class="docutils literal">+</span> and <span class="docutils literal">-</span> are not satisfactory
-for math, except sometimes in monospace typeface, and anyhow TeX is
-unable to break the expression across lines, barring special help).</p>
-<p>See <a class="reference internal" href="#poltoexpr-pol-expr">\PolToExpr{&lt;pol. expr.&gt;}</a> and related macros for customization.</p>
-<p>Extended at <span class="docutils literal">0.8</span> to accept as argument not only the name of a
-polynomial variable but more generally any polynomial expression.</p>
-</dd>
-</dl>
-</div>
-<div class="section" id="the-polexpr-0-8-extensions-to-the-xintexpr-syntax">
-<span id="polexpr08"></span><h1><a class="toc-backref" href="#id39">The polexpr <span class="docutils literal">0.8</span> extensions to the <span class="docutils literal">\xintexpr</span> syntax</a></h1>
-<p>All the syntax elements described in this section can be used in the
-<span class="docutils literal"><span class="pre">\xintexpr/\xinteval</span></span> context (where polynomials can be obtained from
-the <span class="docutils literal"><span class="pre">pol([])</span></span> constructor, once polexpr is loaded): their usage is
-not limited to only <span class="docutils literal">\poldef</span> context.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>If a variable <span class="docutils literal">myPol</span> defined via <span class="docutils literal">\xintdefvar</span> turns out
-to be a polynomial, the difference with those declared via <span class="docutils literal">\poldef</span>
-will be:</p>
-<ol class="arabic">
-<li><p><span class="docutils literal">myPol</span> is not usable as <em>function</em>, but only as a variable.
-Attention that <span class="docutils literal">f(x)</span> if <span class="docutils literal">f</span> is only a variable (even a
-polynomial one) will actually compute <span class="docutils literal">f * x</span>.</p></li>
-<li><p><span class="docutils literal">myPol</span> is not known to the polexpr package, hence for example the
-macros to achieve localization of its roots are unavailable.</p>
-<p>In a parallel universe I perhaps have implemented this expandably
-which means it could then be accessible with syntax such as
-<span class="docutils literal"><span class="pre">rightmostroot(pol([42,1,34,2,-8,1]))</span></span> but...</p>
-</li>
-</ol>
-</div>
-<div class="section" id="warning-about-unstability-of-the-new-syntax">
-<h2><a class="toc-backref" href="#id40">Warning about unstability of the new syntax</a></h2>
-<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p>Consider the entirety of this section as <strong>UNSTABLE</strong> and
-<strong>EXPERIMENTAL</strong> (except perhaps regarding <span class="docutils literal">+</span>, <span class="docutils literal">-</span> and <span class="docutils literal">*</span>).</p>
-<p>And this applies even to items not explicitly flagged with one of
-<strong>unstable</strong>, <strong>Unstable</strong>, or <strong>UNSTABLE</strong> which only reflect that
-documentation was written over a period of time exceeding one minute,
-enough for the author mood changes to kick in.</p>
-<p>It is hard to find good names at the start of a life-long extension
-program of functionalities, and perhaps in future it will be
-preferred to rename everything or give to some functions other
-meanings. Such quasi-complete renamings happened already a few times
-during the week devoted to development.</p>
-</div>
-</div>
-<div class="section" id="infix-operators">
-<h2><a class="toc-backref" href="#id41">Infix operators <span class="docutils literal">+, <span class="pre">-,</span> *, /, **, ^</span></a></h2>
-<blockquote>
-<p>As has been explained in the <a class="reference internal" href="#quick-syntax-overview">Quick syntax overview</a> these infix
-operators have been made polynomial aware, not only in the
-<span class="docutils literal">\poldef</span> context, but generally in any <span class="docutils literal"><span class="pre">\xintexpr/\xinteval</span></span>
-context, inclusive of <span class="docutils literal">\xintdeffunc</span>.</p>
-<p>Conversely functions declared via <span class="docutils literal">\xintdeffunc</span> and making use of
-these operators will automatically be able to accept polynomials
-declared from <span class="docutils literal">\poldef</span> as variables.</p>
-<p>Usage of <span class="docutils literal">/</span> for euclidean division of polynomials is <strong>deprecated</strong>.
-Only in case of a scalar denominator is it to be considered stable.
-Please use rather <span class="docutils literal">quo()</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="experimental-infix-operators">
-<h2><a class="toc-backref" href="#id42">Experimental infix operators <span class="docutils literal">//, /:</span></a></h2>
-<blockquote>
-<p>Here is the tentative behaviour of <span class="docutils literal"><span class="pre">A//B</span></span> according to types:</p>
-<ul class="simple">
-<li><p><span class="docutils literal">A</span> non scalar and <span class="docutils literal">B</span> non scalar: euclidean quotient,</p></li>
-<li><p><span class="docutils literal">A</span> scalar and <span class="docutils literal">B</span> scalar: floored division,</p></li>
-<li><p><span class="docutils literal">A</span> scalar and <span class="docutils literal">B</span> non scalar: produces zero,</p></li>
-<li><p><span class="docutils literal">A</span> non scalar and <span class="docutils literal">B</span> scalar: coefficient per
-coefficient floored division.</p></li>
-</ul>
-<p>This is an <strong>experimental</strong> overloading of the <span class="docutils literal">//</span> and <span class="docutils literal">/:</span>
-from <span class="docutils literal">\xintexpr</span>.</p>
-<p>The behaviour in the last case, but not only, is to be considerd
-<strong>unstable</strong>. The alternative would be for <span class="docutils literal"><span class="pre">A//B</span></span> with <span class="docutils literal">B</span>
-scalar to act as <span class="docutils literal">quo(A,B)</span>. But, we have currently chosen to let
-<span class="docutils literal">//B</span> for a scalar <span class="docutils literal">B</span> act coefficient-wise on the numerator.
-Beware that it thus means it can be employed with the idea of doing
-euclidean division only by checking that <span class="docutils literal">B</span> is non-scalar.</p>
-<p>The <span class="docutils literal">/:</span> operator provides the associated remainder so always
-<span class="docutils literal">A</span> is reconstructed from <span class="docutils literal"><span class="pre">(A//B)*B</span> + <span class="pre">A/:B</span></span>.</p>
-<p>If <span class="docutils literal">:</span> is active character use <span class="docutils literal">/\string:</span> (it is safer to use
-<span class="docutils literal">/\string :</span> if it is not known if <span class="docutils literal">:</span> has catcode other, letter,
-or is active, but note that <span class="docutils literal">/:</span> is fine and needs no precaution if
-<span class="docutils literal">:</span> has catcode letter, it is only an active <span class="docutils literal">:</span> which is
-problematic, like for all other characters possibly used in an
-expression).</p>
-<blockquote>
-<p><strong>UNSTABLE</strong></p>
-<p>As explained above, there are (among other things) hesitations
-about behaviour with <span class="docutils literal">pol2</span> a scalar.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="comparison-operators">
-<h2><a class="toc-backref" href="#id43">Comparison operators <span class="docutils literal">&lt;, &gt;, &lt;=, &gt;=, ==, !=</span></a></h2>
-<blockquote>
-<p><strong>NOT YET IMPLEMENTED</strong></p>
-<p>As the internal representation by <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> and <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> of
-fractions does not currently require them to be in reduced terms,
-such operations would be a bit costly as they could not benefit from
-the <span class="docutils literal">\pdfstrcmp</span> engine primitive. In fact <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> does not use
-it yet anywhere, even for normalized pure integers, although it could
-speed up signifcantly certain aspects of core arithmetic.</p>
-<p>Equality of polynomials can currently be tested by computing the
-difference, which is a bit costly. And of course the <span class="docutils literal">deg()</span>
-function allows comparing degrees. In this context note the
-following syntax:</p>
-<pre class="literal-block">(deg(Q)) ?? { zero } { non-zero scalar } { non-scalar }</pre>
-<p>for branching.</p>
-</blockquote>
-</div>
-<div class="section" id="pol-nutple-expression">
-<h2><a class="toc-backref" href="#id44"><span class="docutils literal"><span class="pre">pol(&lt;nutple</span> expression&gt;)</span></a></h2>
-<blockquote>
-<p>This converts a nutple <span class="docutils literal"><span class="pre">[c0,c1,...,cN]</span></span> into the polynomial
-variable having these coefficients. Attention that the square
-brackets are <strong>mandatory</strong>, except of course if the argument is
-actually an expression producing such a &quot;nutple&quot;.</p>
-<blockquote>
-<p>Currently, this process will not normalize the coefficients (such
-as reducing to lowest terms), it only trims out the leading zero
-coefficients.</p>
-</blockquote>
-<p>Inside <span class="docutils literal">\xintexpr</span>, this is the only (allowed) way to create ex
-nihilo a polynomial variable; inside <span class="docutils literal">\poldef</span> it is an alternative
-input syntax which is more efficient than typing <span class="docutils literal">c0 + c1 * x + c2 * x^2 + ...</span>.</p>
-</blockquote>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p>Whenever an expression with polynomials collapses to a constant, it
-becomes a scalar. There is currently no distinction during the
-parsing of expressions by <span class="docutils literal">\poldef</span>
-or <span class="docutils literal">\xintexpr</span> between constant polynomial variables and scalar
-variables.</p>
-<p>Naturally, <span class="docutils literal">\poldef</span> can be used to declare a constant polynomial
-<span class="docutils literal">P</span>, then <span class="docutils literal">P</span> can also be used as function having a value
-independent of argument, but as a variable, it is non-distinguishable
-from a scalar (of course functions such as <span class="docutils literal">deg()</span> tacitly
-consider scalars to be constant polynomials).</p>
-<p>Notice that we tend to use the vocable &quot;variable&quot; to refer to
-arbitrary expressions used as function arguments, without implying
-that we are actually referring to pre-declared variables in the sense
-of <span class="docutils literal">\xintdefvar</span>.</p>
-</div>
-</div>
-<div class="section" id="lpol-nutple-expression">
-<span id="lpol"></span><h2><a class="toc-backref" href="#id45"><span class="docutils literal"><span class="pre">lpol(&lt;nutple</span> expression&gt;)</span></a></h2>
-<blockquote>
-<p>This converts a nutple <span class="docutils literal"><span class="pre">[cN,...,c1,c0]</span></span> into the polynomial
-variable having these coefficients, with leading coefficients coming
-first in the input. Attention that the square brackets are
-<strong>mandatory</strong>, except of course if the argument is actually an
-expression producing such a &quot;nutple&quot;.</p>
-<blockquote>
-<p>Currently, this process will not normalize the coefficients (such
-as reducing to lowest terms), it only trims out the leading zero
-coefficients.</p>
-<p><strong>NAME UNSTABLE</strong></p>
-</blockquote>
-<p>It can be used in <span class="docutils literal">\poldef</span> as an alternative input syntax, which
-is more efficient than using the algebraic notation with monomials.</p>
-<p>(new with <span class="docutils literal">0.8.1</span>, an empty nutple will cause breakage)</p>
-</blockquote>
-</div>
-<div class="section" id="xinteval-pol-expr">
-<h2><a class="toc-backref" href="#id46"><span class="docutils literal"><span class="pre">\xinteval{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>This is documented here for lack of a better place: it evaluates the
-polynomial expression then outputs the &quot;string&quot; <span class="docutils literal"><span class="pre">pol([c0,</span> c1, <span class="pre">...,</span> cN])</span>
-if the degree <span class="docutils literal">N</span> is at least one (and the usual scalar output else).</p>
-<p>The &quot;pol&quot; word uses letter catcodes, which is actually mandatory for
-this output to be usable as input, but it does not make sense to use
-this inside <span class="docutils literal">\poldef</span> or <span class="docutils literal">\xintexpr</span> at it means basically
-executing <span class="docutils literal"><span class="pre">pol(coeffs(..expression..))</span></span> which is but a convoluted
-way to obtain the same result as <span class="docutils literal"><span class="pre">(..expression..)</span></span> (the
-parentheses delimiting the polynomial expression).</p>
-<p>For example, <span class="docutils literal"><span class="pre">\xinteval{(1+pol([0,1]))^10}</span></span> expands (in two steps)
-to:</p>
-<pre class="literal-block">pol([1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1])</pre>
-<p>You do need loading polexpr for this, else of course <span class="docutils literal"><span class="pre">pol([])</span></span>
-remains unknown to <span class="docutils literal">\xinteval{}</span> as well as the polynomial algebra !
-This example can also be done as
-<span class="docutils literal"><span class="pre">\xinteval{subs((1+x)^10,x=pol([0,1]))}</span></span>.</p>
-<p>I hesitated using as output the polynomial notation as produced by
-<a class="reference internal" href="#poltoexpr">\PolToExpr{}</a>, but finally opted for this.</p>
-</blockquote>
-</div>
-<div class="section" id="evalp-pol-expr-pol-expr">
-<h2><a class="toc-backref" href="#id47"><span class="docutils literal"><span class="pre">evalp(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;pol. expr&gt;)</span></a></h2>
-<blockquote>
-<p>Evaluates the first argument as a polynomial function of the
-second. Usually the second argument will be scalar, but this is not
-required:</p>
-<pre class="literal-block">\poldef K(x):= evalp(-3x^3-5x+1,-27x^4+5x-2);</pre>
-<p>If the first argument is an already declared polynomial <span class="docutils literal">P</span>, use
-rather the functional form <span class="docutils literal">P()</span> (which can accept a numerical as
-well as polynomial argument) as it is more efficient.</p>
-<p>One can also use <span class="docutils literal">subs()</span> syntax <a class="footnote-reference brackets" href="#id5" id="id4">2</a> (see <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation):</p>
-<pre class="literal-block">\poldef K(x):= subs(-3y^3-5y+1, y = -27x^4+5x-2);</pre>
-<p>but the <span class="docutils literal">evalp()</span> will use a Horner evaluation scheme which is
-usually more efficient.</p>
-<dl class="footnote brackets">
-<dt class="label" id="id5"><span class="brackets"><a class="fn-backref" href="#id4">2</a></span></dt>
-<dd><p>by the way Maple uses the opposite, hence wrong, order
-<span class="docutils literal"><span class="pre">subs(x=...,</span> P)</span> but was written before computer science
-reached the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> heights. However it makes validating
-Maple results by polexpr sometimes cumbersome, but perhaps
-they will update it at some point.</p>
-</dd>
-</dl>
-<blockquote>
-<p><strong>name unstable</strong></p>
-<p><span class="docutils literal">poleval</span>? <span class="docutils literal">evalpol</span>? <span class="docutils literal">peval</span>? <span class="docutils literal">evalp</span>? <span class="docutils literal">value</span>?
-<span class="docutils literal">eval</span>? <span class="docutils literal">evalat</span>? <span class="docutils literal">eval1at2</span>? <span class="docutils literal">evalat2nd</span>?</p>
-<p>Life is so complicated when one asks questions. Not everybody does,
-though, as is amply demonstrated these days.</p>
-<p><strong>syntax unstable</strong></p>
-<p>I am hesitating about permuting the order of the arguments.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="deg-pol-expr">
-<h2><a class="toc-backref" href="#id48"><span class="docutils literal"><span class="pre">deg(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>Computes the degree.</p>
-</blockquote>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p>As <span class="docutils literal">\xintexpr</span> does not yet support infinities, the degree of
-the zero polynomial is <span class="docutils literal"><span class="pre">-1</span></span>. Beware that this breaks additivity
-of degrees, but <span class="docutils literal"><span class="pre">deg(P)&lt;0</span></span> correctly detects the zero polynomial,
-and <span class="docutils literal"><span class="pre">deg(P)&lt;=0</span></span> detects scalars.</p>
-</div>
-</div>
-<div class="section" id="coeffs-pol-expr">
-<h2><a class="toc-backref" href="#id49"><span class="docutils literal"><span class="pre">coeffs(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>Produces the nutple <span class="docutils literal"><span class="pre">[c0,c1,...,cN]</span></span> of coefficients. The highest
-degree coefficient is always non zero (except for the zero
-polynomial...).</p>
-<blockquote>
-<p><strong>name unstable</strong></p>
-<p>I am considering in particular using <span class="docutils literal">polcoeffs()</span> to avoid
-having to overload <span class="docutils literal">coeffs()</span> in future when matrix type
-will be added to <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="lcoeffs-pol-expr">
-<span id="lcoeffs"></span><h2><a class="toc-backref" href="#id50"><span class="docutils literal"><span class="pre">lcoeffs(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>Produces the nutple <span class="docutils literal"><span class="pre">[cN,....,c1,c0]</span></span> of coefficients, starting
-with the highest degree coefficient.</p>
-<p>(new with <span class="docutils literal">0.8.1</span>)</p>
-</blockquote>
-</div>
-<div class="section" id="coeff-pol-expr-num-expr">
-<h2><a class="toc-backref" href="#id51"><span class="docutils literal"><span class="pre">coeff(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;num. <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>As expected. Produces zero if the numerical index is negative or
-higher than the degree.</p>
-<blockquote>
-<p><strong>name, syntax and output unstable</strong></p>
-<p>I am hesitating with <span class="docutils literal">coeff(n,pol)</span> syntax and also perhaps using
-<span class="docutils literal">polcoeff()</span> in order to avoid having to overload <span class="docutils literal">coeff()</span>
-when matrix type will be added to <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>.</p>
-<p>The current behaviour is at odds with legacy
-<a class="reference internal" href="#polnthcoeff-polname-index">\PolNthCoeff{&lt;polname&gt;}{&lt;index&gt;}</a> regarding negative indices.
-Accessing leading or sub-leading coefficients can be done with
-other syntax, see <a class="reference internal" href="#lc-pol-expr">lc(&lt;pol. expr.&gt;)</a>, and in some contexts it
-is useful to be able to rely on the fact that coefficients with
-negative indices do vanish, so I am for time being maintaining this.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="lc-pol-expr">
-<span id="lc"></span><h2><a class="toc-backref" href="#id52"><span class="docutils literal"><span class="pre">lc(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>The leading coefficient. The same result can be obtained from
-<span class="docutils literal"><span class="pre">coeffs(pol)[-1]</span></span>, which shows also how to generalize to access
-sub-leading coefficients. See the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation for
-Python-like indexing syntax.</p>
-</blockquote>
-</div>
-<div class="section" id="monicpart-pol-expr">
-<h2><a class="toc-backref" href="#id53"><span class="docutils literal"><span class="pre">monicpart(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>Divides by the leading coefficient, except that <span class="docutils literal"><span class="pre">monicpart(0)==0</span></span>.</p>
-<blockquote>
-<p><strong>unstable</strong></p>
-<p>Currently the coefficients are reduced to lowest terms (contrarily
-to legacy behaviour of <a class="reference internal" href="#polmakemonic">\PolMakeMonic</a>), and
-additionally the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> <span class="docutils literal">\xintREZ</span> macro is applied which
-extracts powers of ten from numerator or denominator and stores
-them internally separately. This is generally beneficial to
-efficiency of multiplication.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="cont-pol-expr">
-<span id="cont"></span><h2><a class="toc-backref" href="#id54"><span class="docutils literal"><span class="pre">cont(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>The (fractional) greatest common divisor of the polynomial
-coefficients. It is always produced as an irreducible (non-negative)
-fraction. According to Gauss theorem the content of a product is the
-product of the contents.</p>
-<blockquote>
-<p><strong>name and syntax unstable</strong></p>
-<p>At <span class="docutils literal">0.8</span> it was created as <span class="docutils literal">icontent()</span> to match the legacy
-macro <a class="reference internal" href="#policontent">\PolIContent</a>, whose name in 2018 was
-chosen in relation to Maple's function <span class="docutils literal">icontent()</span>, possibly
-because at that time I had not seen that Maple also had a
-<span class="docutils literal">content()</span> function. Name changed at <span class="docutils literal">0.8.1</span>.</p>
-<p>It will change syntax if in future multivariate polynomials are
-supported, and <span class="docutils literal">icontent()</span> will then make a come-back.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="primpart-pol-expr">
-<h2><a class="toc-backref" href="#id55"><span class="docutils literal"><span class="pre">primpart(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>The quotient (except for the zero polynomial) by
-<span class="docutils literal"><span class="pre">cont(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span>. This is thus a polynomial with
-integer coefficients having <span class="docutils literal">1</span> as greatest common divisor. The
-sign of the leading coefficient is the same as in the original.</p>
-<p>And <span class="docutils literal"><span class="pre">primpart(0)==0</span></span>.</p>
-<p>The trailing zeros of the integer coefficients are extracted
-into a power of ten exponent part, in the internal representation.</p>
-</blockquote>
-</div>
-<div class="section" id="quorem-pol-expr-pol-expr">
-<h2><a class="toc-backref" href="#id56"><span class="docutils literal"><span class="pre">quorem(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;pol. <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>Produces a nutple <span class="docutils literal">[Q,R]</span> with <span class="docutils literal">Q</span> the euclidean quotient and
-<span class="docutils literal">R</span> the remainder.</p>
-<blockquote>
-<p><strong>name unstable</strong></p>
-<p><span class="docutils literal">poldiv()</span>?</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="quo-pol-expr-pol-expr">
-<h2><a class="toc-backref" href="#id57"><span class="docutils literal"><span class="pre">quo(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;pol. <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>The euclidean quotient.</p>
-<p>The deprecated <span class="docutils literal">pol1/pol2</span> syntax computes the same polynomial.</p>
-</blockquote>
-</div>
-<div class="section" id="rem-pol-expr-pol-expr">
-<h2><a class="toc-backref" href="#id58"><span class="docutils literal"><span class="pre">rem(&lt;pol.</span> <span class="pre">expr.&gt;,</span> &lt;pol. <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>The euclidean remainder. If <span class="docutils literal">pol2</span> is a (non-zero) scalar, this is
-zero.</p>
-<p>There is no infix operator associated to this, for lack of evident
-notation. Please advise.</p>
-<p><span class="docutils literal">/:</span> can be used if one is certain that <span class="docutils literal">pol2</span> is of
-degree at least one. But read the warning about it being unstable
-even in that case.</p>
-</blockquote>
-</div>
-<div class="section" id="prem-pol-expr-1-pol-expr-2">
-<span id="prem"></span><h2><a class="toc-backref" href="#id59"><span class="docutils literal"><span class="pre">prem(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;)</span></a></h2>
-<blockquote>
-<p>Produces a nutple <span class="docutils literal">[m, spR]</span> where <span class="docutils literal">spR</span> is the (special) pseudo
-Euclidean remainder. Its description is:</p>
-<ul>
-<li><p>the standard euclidean remainder <span class="docutils literal">R</span> is <span class="docutils literal">spR/m</span></p></li>
-<li><p><span class="docutils literal">m = b^f</span> with <span class="docutils literal">b</span> equal to the <strong>absolute value</strong> of the
-leading coefficient of <span class="docutils literal">pol2</span>,</p></li>
-<li><p><span class="docutils literal">f</span> is the number of non-zero coefficients in the euclidean
-quotient, if <span class="docutils literal"><span class="pre">deg(pol2)&gt;0</span></span> (even if the remainder vanishes).</p>
-<p>If <span class="docutils literal">pol2</span> is a scalar however, the function outputs <span class="docutils literal">[1,0]</span>.</p>
-</li>
-</ul>
-<p>With these definitions one can show that if both <span class="docutils literal">pol1</span> and
-<span class="docutils literal">pol2</span> have integer coefficients, then this is also the case of
-<span class="docutils literal">spR</span>, which makes its interest (and also <span class="docutils literal">m*Q</span> has integer
-coefficients, with <span class="docutils literal">Q</span> the euclidean quotient, if <span class="docutils literal"><span class="pre">deg(pol2)&gt;0</span></span>).
-Also, <span class="docutils literal">prem()</span> is computed faster than <span class="docutils literal">rem()</span> for such integer
-coefficients polynomials.</p>
-<div class="admonition hint">
-<p class="admonition-title">Hint</p>
-<p>If you want the euclidean quotient <span class="docutils literal">R</span> evaluated via <span class="docutils literal">spR/m</span>
-(which may be faster, even with non integer coefficients) use
-<span class="docutils literal"><span class="pre">subs(last(x)/first(x),x=prem(P,Q))</span></span> syntax as it avoids
-computing <span class="docutils literal">prem(P,Q)</span> twice. This does the trick both in
-<span class="docutils literal">\poldef</span> or in <span class="docutils literal">\xintdefvar</span>.</p>
-<p>However, as is explained in the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation, using
-such syntax in an <span class="docutils literal">\xintdeffunc</span> is (a.t.t.o.w) illusory, due to
-technicalities of how <span class="docutils literal">subs()</span> gets converted into nested
-expandable macros. One needs an auxiliary function like this:</p>
-<pre class="literal-block">\xintdeffunc lastoverfirst(x):=last(x)/first(x);
-\xintdeffunc myR(x)=lastoverfirst(prem(x));</pre>
-<p>Then, <span class="docutils literal">myR(pol1,pol2)</span> will evaluate <span class="docutils literal">prem(pol1,pol2)</span> only
-once and compute a polynomial identical to the euclidean
-remainder (internal representations of coefficients may differ).</p>
-</div>
-<p>In this case of integer coefficients polynomials, the polexpr
-internal representation of the integer coefficients in the pseudo
-remainder will be with unit denominators only if that was already the
-case for those of <span class="docutils literal">pol1</span> and <span class="docutils literal">pol2</span> (no automatic reduction to
-lowest terms is made prior or after computation).</p>
-<p>Pay attention here that <span class="docutils literal">b</span> is the <strong>absolute value</strong> of the
-leading coefficient of <span class="docutils literal">pol2</span>. Thus the coefficients of the
-pseudo-remainder have the same signs as those of the standard
-remainder. This diverges from Maple's function with the same name.</p>
-</blockquote>
-</div>
-<div class="section" id="divmod-pol-expr-1-pol-expr-2">
-<h2><a class="toc-backref" href="#id60"><span class="docutils literal"><span class="pre">divmod(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;)</span></a></h2>
-<blockquote>
-<p>Overloads the scalar <span class="docutils literal">divmod()</span> and associates it with the
-experimental <span class="docutils literal">//</span> and <span class="docutils literal">/:</span> as extended to the polynomial type.</p>
-<p>In particular when both <span class="docutils literal">pol1</span> and <span class="docutils literal">pol2</span> are scalars, this is
-the usual <span class="docutils literal">divmod()</span> (as in Python) and for <span class="docutils literal">pol1</span> and <span class="docutils literal">pol2</span>
-non constant polynomials, this is the same as <span class="docutils literal">quorem()</span>.</p>
-<blockquote>
-<p><strong>Highly unstable</strong> overloading of <span class="docutils literal">\xinteval</span>'s <span class="docutils literal">divmod()</span>.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="mod-pol-expr-1-pol-expr-2">
-<h2><a class="toc-backref" href="#id61"><span class="docutils literal"><span class="pre">mod(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;)</span></a></h2>
-<blockquote>
-<p>The <span class="docutils literal">R</span> of the <span class="docutils literal">divmod()</span> output. Same as <span class="docutils literal">R</span> of <span class="docutils literal">quorem()</span>
-when the second argument <span class="docutils literal">pol2</span> is of degree at least one.</p>
-<blockquote>
-<p><strong>Highly unstable</strong> overloading of <span class="docutils literal">\xinteval</span>'s <span class="docutils literal">mod()</span>.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="polgcd-pol-expr-1-pol-expr-2">
-<h2><a class="toc-backref" href="#id62"><span class="docutils literal"><span class="pre">polgcd(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;, <span class="pre">...)</span></span></a></h2>
-<blockquote>
-<p>Evaluates to the greatest common polynomial divisor of all the
-polynomial inputs. The output is a <strong>primitive</strong> (in particular,
-with integer coefficients) polynomial. It is zero if and only if all
-inputs vanish.</p>
-<p>Attention, there must be either at least two polynomial variables, or
-alternatively, only one argument which then must be a bracketed list
-or some expression or variable evaluating to such a &quot;nutple&quot; whose
-items are polynomials (see the documentation of the scalar <span class="docutils literal">gcd()</span>
-in <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>).</p>
-<blockquote>
-<p>The two variable case could (and was, during development) have been
-defined at user level like this:</p>
-<pre class="literal-block">\xintdeffunc polgcd_(P,Q):=
- (deg(Q))??{P}{1}{polgcd_(Q,primpart(last(prem(P,Q))))};
-\xintdeffunc polgcd(P,Q):=polgcd_(primpart(P),primpart(Q));%</pre>
-<p>This is basically what is done internally for two polynomials, up
-to some internal optimizations.</p>
-</blockquote>
-<p><strong>UNSTABLE</strong></p>
-<p>I hesitate between returning a <em>primitive</em> or a <em>monic</em> polynomial.
-Maple returns a primitive polynomial if all inputs <a class="footnote-reference brackets" href="#id7" id="id6">3</a> have integer
-coefficients, else it returns a monic polynomial, but this is
-complicated technically for us to add such a check and would add
-serious overhead.</p>
-<p>Internally, computations are done using primitive
-integer-coefficients polynomials (as can be seen in the function
-template above). So I decided finally to output a primitive
-polynomial, as one can always apply <span class="docutils literal">monicpart()</span> to it.</p>
-<p>Attention that this is at odds with behaviour of the legacy
-<a class="reference internal" href="#polgcd">\PolGCD</a> (non expandable) macro.</p>
-<dl class="footnote brackets">
-<dt class="label" id="id7"><span class="brackets"><a class="fn-backref" href="#id6">3</a></span></dt>
-<dd><p>actually, only two polynomial arguments are allowed by Maple's
-<span class="docutils literal">gcd()</span> as far as I know.</p>
-</dd>
-</dl>
-</blockquote>
-</div>
-<div class="section" id="resultant-pol-expr-1-pol-expr-2">
-<h2><a class="toc-backref" href="#id63"><span class="docutils literal"><span class="pre">resultant(&lt;pol.</span> expr. 1&gt;, &lt;pol. expr. 2&gt;)</span></a></h2>
-<blockquote>
-<p>The resultant.</p>
-<blockquote>
-<p><strong>NOT YET IMPLEMENTED</strong></p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="disc-pol-expr">
-<h2><a class="toc-backref" href="#id64"><span class="docutils literal"><span class="pre">disc(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>The discriminant.</p>
-<blockquote>
-<p><strong>NOT YET IMPLEMENTED</strong></p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="polpowmod-pol-expr-1-num-expr-pol-expr-2">
-<h2><a class="toc-backref" href="#id65"><span class="docutils literal"><span class="pre">polpowmod(&lt;pol.</span> expr. 1&gt;, &lt;num. <span class="pre">expr.&gt;,</span> &lt;pol. expr. 2&gt;)</span></a></h2>
-<blockquote>
-<p>Modular exponentiation: <span class="docutils literal">mod(pol1^N, pol2)</span> in a more efficient
-manner than first computing <span class="docutils literal">pol1^N</span> then reducing modulo <span class="docutils literal">pol2</span>.</p>
-<p>Attention that this is using the <span class="docutils literal">mod()</span> operation, whose current
-experimental status is as follows:</p>
-<ul class="simple">
-<li><p>if <span class="docutils literal"><span class="pre">deg(pol2)&gt;0</span></span>, the euclidean remainder operation,</p></li>
-<li><p>if <span class="docutils literal">pol2</span> is a scalar, coefficient-wise reduction modulo <span class="docutils literal">pol2</span>.</p></li>
-</ul>
-<p><strong>UNSTABLE</strong></p>
-<blockquote>
-<p>This is currently implemented at high level via <span class="docutils literal">\xintdeffunc</span> and
-recursive definitions, which were copied over from a scalar example
-in the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> manual:</p>
-<pre class="literal-block">\xintdeffunc polpowmod_(P, m, Q) :=
- isone(m)?
- % m=1: return P modulo Q
- { mod(P,Q) }
- % m &gt; 1: test if odd or even and do recursive call
- { odd(m)? { mod(P*sqr(polpowmod_(P, m//2, Q)), Q) }
- { mod( sqr(polpowmod_(P, m//2, Q)), Q) }
- }
- ;%
-\xintdeffunc polpowmod(P, m, Q) := (m)?{polpowmod_(P, m, Q)}{1};%</pre>
-<p>Negative exponents are not currently implemented.</p>
-<p>For example:</p>
-<pre class="literal-block">\xinteval{subs(polpowmod(1+x,100,x^7),x=pol([0,1]))}
-\xinteval{subs(polpowmod(1+x,20,10), x=pol([0,1]))}</pre>
-<p>produce respectively:</p>
-<pre class="literal-block">pol([1, 100, 4950, 161700, 3921225, 75287520, 1192052400])
-pol([1, 0, 0, 0, 5, 4, 0, 0, 0, 0, 6, 0, 0, 0, 0, 4, 5, 0, 0, 0, 1])</pre>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="rdcoeffs-pol-expr">
-<h2><a class="toc-backref" href="#id66"><span class="docutils literal"><span class="pre">rdcoeffs(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>This operates on the internal representation of the coefficients,
-reducing them to lowest terms.</p>
-<blockquote>
-<p><strong>name HIGHLY undecided</strong></p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="rdzcoeffs-pol-expr">
-<h2><a class="toc-backref" href="#id67"><span class="docutils literal"><span class="pre">rdzcoeffs(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>This operates on the internal representation of the coefficients,
-reducing them to lowest terms then extracting from numerator
-or denominator the maximal power of ten to store as a decimal
-exponent.</p>
-<p>This is sometimes favourable to more efficient polynomial algebra
-computations.</p>
-<blockquote>
-<p><strong>name HIGHLY undecided</strong></p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="diff1-pol-expr">
-<h2><a class="toc-backref" href="#id68"><span class="docutils literal"><span class="pre">diff1(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>The first derivative.</p>
-<blockquote>
-<p><strong>name UNSTABLE</strong></p>
-<p>This name may be used in future to be the partial derivative with
-respect to a first variable.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="diff2-pol-expr">
-<h2><a class="toc-backref" href="#id69"><span class="docutils literal"><span class="pre">diff2(&lt;pol.</span> <span class="pre">expr.&gt;)</span></span></a></h2>
-<blockquote>
-<p>The second derivative.</p>
-<blockquote>
-<p><strong>name UNSTABLE</strong></p>
-<p>This name may be used in future to be the partial derivative with
-respect to a second variable.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="diffn-pol-expr-p-num-expr-n">
-<h2><a class="toc-backref" href="#id70"><span class="docutils literal"><span class="pre">diffn(&lt;pol.</span> expr. P&gt;, &lt;num. expr. n&gt;)</span></a></h2>
-<blockquote>
-<p>The <span class="docutils literal">n</span>th derivative of <span class="docutils literal">P</span>. For <span class="docutils literal">n&lt;0</span> computes iterated primitives
-vanishing at the origin.</p>
-<p>The coefficients are not reduced to lowest terms.</p>
-<blockquote>
-<p><strong>name and syntax UNSTABLE</strong></p>
-<p>I am also considering reversing the order of the arguments.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="antider-pol-expr-p">
-<h2><a class="toc-backref" href="#id71"><span class="docutils literal"><span class="pre">antider(&lt;pol.</span> expr. P&gt;)</span></a></h2>
-<blockquote>
-<p>The primitive of <span class="docutils literal">P</span> with no constant term. Same as <span class="docutils literal"><span class="pre">diffn(P,-1)</span></span>.</p>
-</blockquote>
-</div>
-<div class="section" id="intfrom-pol-expr-p-pol-expr-c">
-<h2><a class="toc-backref" href="#id72"><span class="docutils literal"><span class="pre">intfrom(&lt;pol.</span> expr. P&gt;, &lt;pol. expr. c&gt;)</span></a></h2>
-<blockquote>
-<p>The primitive of <span class="docutils literal">P</span> vanishing at <span class="docutils literal">c</span>, i.e. <span class="docutils literal">\int_c^x P(t)dt</span>.</p>
-<p>Also <span class="docutils literal">c</span> can be a polynomial... so if <span class="docutils literal">c</span> is monomial <span class="docutils literal">x</span>
-this will give zero!</p>
-<blockquote>
-<p><strong>UNSTABLE</strong></p>
-<p>Allowing general polynomial variable for <span class="docutils literal">c</span> adds a bit of
-overhead to the case of a pure scalar. So I am hesitating
-maintaining this feature whose interest appears dubious.</p>
-</blockquote>
-</blockquote>
-</div>
-<div class="section" id="integral-pol-expr-p-pol-expr-a-pol-expr-b">
-<h2><a class="toc-backref" href="#id73"><span class="docutils literal"><span class="pre">integral(&lt;pol.</span> expr. P&gt;, [&lt;pol. expr. a&gt;, &lt;pol. expr. <span class="pre">b&gt;])</span></span></a></h2>
-<blockquote>
-<p><span class="docutils literal">\int_a^b P(t)dt</span>.</p>
-<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p>The brackets here are not denoting an optional argument
-but a <em>mandatory</em> nutple argument <span class="docutils literal">[a, b]</span> with <em>two items</em>.</p>
-</div>
-<p><span class="docutils literal">a</span> and <span class="docutils literal">b</span> are not restricted to be scalars, they are allowed to
-be themselves polynomial variables or even polynomial expressions.</p>
-<blockquote>
-<p>To compute <span class="docutils literal"><span class="pre">\int_{x-1}^x</span> P(t)dt</span> it is more efficient to use
-<span class="docutils literal"><span class="pre">intfrom(x-1)</span></span>.</p>
-<p>Similary to compute <span class="docutils literal"><span class="pre">\int_x^{x+1}</span> P(t)dt</span>, use <span class="docutils literal"><span class="pre">-intfrom(x+1)</span></span>.</p>
-<p><strong>UNSTABLE</strong></p>
-<p>Am I right to allow general polynomials <span class="docutils literal">a</span> and <span class="docutils literal">b</span> hence add
-overhead to the pure scalar case ?</p>
-</blockquote>
-</blockquote>
-</div>
-</div>
-<div class="section" id="non-expandable-macros">
-<h1><a class="toc-backref" href="#id74">Non-expandable macros</a></h1>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>At <span class="docutils literal">0.8</span> <span class="docutils literal">polexpr</span> is usable with Plain TeX and not only with
-LaTeX. Some examples given in this section may be using LaTeX syntax
-such as <span class="docutils literal">\renewcommand</span>.</p>
-</div>
-<div class="section" id="poldef-polname-letter-expression-using-the-letter-as-indeterminate">
-<span id="poldef"></span><h2><a class="toc-backref" href="#id75"><span class="docutils literal">\poldef <span class="pre">polname(letter):=</span> expression using the letter as indeterminate;</span></a></h2>
-<blockquote>
-<p>This evaluates the <em>polynomial expression</em> and stores the
-coefficients in a private structure accessible later via other
-package macros, used with argument <span class="docutils literal">polname</span>. Of course the
-<em>expression</em> can make use of previously defined polynomials.</p>
-<p>Polynomial names must start with a letter and are constituted of
-letters, digits, underscores and the right tick <span class="docutils literal">'</span>.</p>
-<p>The whole <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> syntax is authorized, as long as the final
-result is of polynomial type:</p>
-<pre class="literal-block">\poldef polname(z) := add((-1)^i z^(2i+1)/(2i+1)!, i = 0..10);</pre>
-<p>With fractional coefficients, beware the <a class="reference internal" href="#warningtacit">tacit multiplication issue</a>.</p>
-<p>Furthermore:</p>
-<ul class="simple">
-<li><p>a variable <span class="docutils literal">polname</span> is defined which can be used in <span class="docutils literal">\poldef</span>
-as well as in <span class="docutils literal">\xinteval</span> for algebraic computations or as
-argument to polynomial aware functions,</p></li>
-<li><p>a function <span class="docutils literal">polname()</span> is defined which can be used in <span class="docutils literal">\poldef</span>
-as well as in <span class="docutils literal">\xinteval</span>. It accepts there as argument scalars
-and also other polynomials (via their names, thanks to previous
-item).</p></li>
-</ul>
-<p>Notice that any function defined via <span class="docutils literal">\xintdeffunc</span> and using
-only algebraic operations (and ople indexing or slicing operations)
-should work fine in <span class="docutils literal"><span class="pre">\xintexpr/\xinteval</span></span> with such polynomial
-names as argument.</p>
-<p>In the case of a constant polynomial, the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variable (not the
-internal data structure on which the package macros operate)
-associated to it is indistinguishable from a scalar, it is actually
-a scalar and has lost all traces from its origins as a polynomial
-(so for example can be used as argument to the <span class="docutils literal">cos()</span> function).</p>
-<p>The <em>function</em> on the other hand remains a one-argument function,
-which simply has a constant value.</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p>The function <span class="docutils literal">polname()</span> is defined <strong>only</strong> for
-<span class="docutils literal"><span class="pre">\xintexpr/\xinteval</span></span>
-context. It will be unknown to <span class="docutils literal">\xintfloateval</span>.</p>
-<p>Worse, a
-previously existing floating point function of the same name will
-be let undefined again, to avoid hard to debug mismatches between
-exact and floating point polynomials. This also applies when the
-polynomial is produced not via <span class="docutils literal">\poldef</span> or <span class="docutils literal">\PolDef</span> but
-as result of usage of the other package macros.</p>
-<p>See <a class="reference internal" href="#polgenfloatvariant-polname">\PolGenFloatVariant{&lt;polname&gt;}</a> to generate a <strong>function</strong>
-usable in <span class="docutils literal">\xintfloateval</span>.</p>
-</div>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p>Using the <strong>variable</strong> <span class="docutils literal">mypol</span> inside <span class="docutils literal">\xintfloateval</span> will
-generate low-level errors because the infix operators there are
-not polynomial-aware, and the polynomial specific functions such
-as <span class="docutils literal">deg()</span> are only defined for usage inside <span class="docutils literal">\xintexpr</span>.</p>
-<p>In short, currently polynomials defined via <span class="docutils literal">polexpr</span> can
-be used in floating point context only for numerical evaluations,
-via <strong>functions</strong> obtained from <a class="reference internal" href="#polgenfloatvariant-polname">\PolGenFloatVariant{&lt;polname&gt;}</a>
-usage.</p>
-<p>Changes to the original polynomial via package macros are not
-automatically mapped to the numerical floating point evaluator
-which must be manually updated as necessary when the original
-rational coefficient polynomial is modified.</p>
-</div>
-<p>The original expression is lost after parsing, and in particular the
-package provides no way to typeset it (of course the package
-provides macros to typeset the computed polynomial). Typesetting
-the original expression has to be done manually, if needed.</p>
-</blockquote>
-</div>
-<div class="section" id="poldef-letter-polname-expr-using-the-letter-as-indeterminate">
-<span id="id8"></span><h2><a class="toc-backref" href="#id76"><span class="docutils literal"><span class="pre">\PolDef[&lt;letter&gt;]{&lt;polname&gt;}{&lt;expr.</span> using the letter as indeterminate&gt;}</span></a></h2>
-<blockquote>
-<p>Does the same as <a class="reference internal" href="#poldef">\poldef</a> in an undelimited macro
-format, the main interest is to avoid potential problems with the
-catcode of the semi-colon in presence of some packages. In absence
-of a <span class="docutils literal">[&lt;letter&gt;]</span> optional argument, the variable is assumed to be
-<span class="docutils literal">x</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polgenfloatvariant-polname">
-<span id="polgenfloatvariant"></span><h2><a class="toc-backref" href="#id77"><span class="docutils literal"><span class="pre">\PolGenFloatVariant{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>Makes the polynomial also usable in the
-<span class="docutils literal"><span class="pre">\xintfloatexpr/\xintfloateval</span></span> parser. It will therein evaluates
-via an Horner scheme using polynomial coefficients already
-pre-rounded to the float precision.</p>
-<p>See also <a class="reference internal" href="#poltofloatexpr-pol-expr">\PolToFloatExpr{&lt;pol. expr.&gt;}</a>.</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p>Any operation, for example generating the derivative polynomial,
-or dividing two polynomials or using the <span class="docutils literal">\PolLet</span>, must be
-followed by explicit usage of <span class="docutils literal"><span class="pre">\PolGenFloatVariant{&lt;polname&gt;}</span></span> if
-the new polynomial is to be used in <span class="docutils literal">\xintfloateval</span>.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="poltypeset-pol-expr">
-<span id="poltypeset"></span><h2><a class="toc-backref" href="#id78"><span class="docutils literal"><span class="pre">\PolTypeset{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>Typesets in descending powers, switching to math mode if in text
-mode, after evaluating the polynomial expression:</p>
-<pre class="literal-block">\PolTypeset{mul(x-i,i=1..5)}% possible since polexpr 0.8</pre>
-<p>The letter used in the input expression is by default <span class="docutils literal">x</span>,
-but can be modified by a redefinition of <a class="reference internal" href="#poltoexprinvar">\PolToExprInVar</a>.</p>
-<p>It uses also by default the letter <span class="docutils literal">x</span> on output but this one can
-be changed via an optional argument:</p>
-<pre class="literal-block">\PolTypeset[z]{polname or polynomial expression}</pre>
-<p>By default zero coefficients are skipped (use <span class="docutils literal">\poltypesetalltrue</span>
-to get all of them in output).</p>
-<p>The following macros (whose meanings will be found in the package code)
-can be re-defined for customization. Their default definitions are
-expandable, but this is not a requirement.</p>
-</blockquote>
-<div class="section" id="poltypesetcmd-raw-coeff">
-<span id="poltypesetcmd"></span><h3><a class="toc-backref" href="#id79"><span class="docutils literal"><span class="pre">\PolTypesetCmd{&lt;raw_coeff&gt;}</span></span></a></h3>
-<blockquote>
-<p>Its package definition checks if the coefficient is <span class="docutils literal">1</span> or <span class="docutils literal"><span class="pre">-1</span></span>
-and then skips printing the <span class="docutils literal">1</span>, except for the coefficient of
-degree zero. Also it sets the conditional deciding behaviour of
-<a class="reference internal" href="#polifcoeffisplusorminusone-t-f">\PolIfCoeffIsPlusOrMinusOne{T}{F}</a>.</p>
-<p>The actual printing of the coefficients, when not equal to plus or
-minus one, is handled by <a class="reference internal" href="#poltypesetone-raw-coeff">\PolTypesetOne{&lt;raw_coeff&gt;}</a>.</p>
-</blockquote>
-<div class="section" id="polifcoeffisplusorminusone-t-f">
-<span id="polifcoeffisplusorminusone"></span><h4><a class="toc-backref" href="#id80"><span class="docutils literal"><span class="pre">\PolIfCoeffIsPlusOrMinusOne{T}{F}</span></span></a></h4>
-<blockquote>
-<p>This macro is a priori undefined.</p>
-<p>It is defined via the default <a class="reference internal" href="#poltypesetcmd-raw-coeff">\PolTypesetCmd{&lt;raw_coeff&gt;}</a> to be
-used if needed in the execution of <a class="reference internal" href="#poltypesetmonomialcmd">\PolTypesetMonomialCmd</a>,
-e.g. to insert a <span class="docutils literal">\cdot</span> in front of <span class="docutils literal"><span class="pre">\PolVar^{\PolIndex}</span></span> if
-the coefficient is not plus or minus one.</p>
-<p>The macro will execute <span class="docutils literal">T</span> if the coefficient has been found to be
-plus or minus one, and <span class="docutils literal">F</span> if not. It chooses expandably between
-<span class="docutils literal">T</span> and <span class="docutils literal">F</span>.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="poltypesetone-raw-coeff">
-<span id="poltypesetone"></span><h3><a class="toc-backref" href="#id81"><span class="docutils literal"><span class="pre">\PolTypesetOne{&lt;raw_coeff&gt;}</span></span></a></h3>
-<blockquote>
-<p>Defaults to <span class="docutils literal">\xintTeXsignedFrac</span> (LaTeX) or <span class="docutils literal">\xintTeXsignedOver</span>
-(else). But these <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> old legacy macros are a bit
-annoying as they insist in exhibiting a power of ten rather than
-using simpler decimal notation.</p>
-<p>As alternative, one can do definitions such as:</p>
-<pre class="literal-block">\def\PolTypesetOne#1{\xintDecToString{\xintREZ{#1}}}
-% or with LaTeX+siunitx for example
-\renewcommand\PolTypesetOne[1]{\num{\xintPFloat[5]{#1}}}
-% (as \num of siunitx understands floating point notation)
-\renewcommand\PolTypesetOne[1]{\num{\xintRound{4}{#1}}}</pre>
-</blockquote>
-</div>
-<div class="section" id="id9">
-<span id="poltypesetmonomialcmd"></span><h3><a class="toc-backref" href="#id82"><span class="docutils literal">\PolTypesetMonomialCmd</span></a></h3>
-<blockquote>
-<p>This decides how a monomial (in variable <span class="docutils literal">\PolVar</span> and with
-exponent <span class="docutils literal">\PolIndex</span>) is to be printed. The default does nothing
-for the constant term, <span class="docutils literal">\PolVar</span> for the first degree and
-<span class="docutils literal"><span class="pre">\PolVar^{\PolIndex}</span></span> for higher degrees monomials. Beware that
-<span class="docutils literal">\PolIndex</span> expands to digit tokens and needs termination in
-<span class="docutils literal">\ifnum</span> tests.</p>
-</blockquote>
-</div>
-<div class="section" id="poltypesetcmdprefix-raw-coeff">
-<span id="poltypesetcmdprefix"></span><h3><a class="toc-backref" href="#id83"><span class="docutils literal"><span class="pre">\PolTypesetCmdPrefix{&lt;raw_coeff&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to a <span class="docutils literal">+</span> if the <span class="docutils literal">raw_coeff</span> is zero or positive, and to
-nothing if <span class="docutils literal">raw_coeff</span> is negative, as in latter case the
-<span class="docutils literal">\xintTeXsignedFrac</span> (or <span class="docutils literal">\xintTeXsignedOver</span>) used by
-<a class="reference internal" href="#poltypesetcmd-raw-coeff">\PolTypesetCmd{&lt;raw_coeff&gt;}</a> will put the <span class="docutils literal">-</span> sign in front of
-the fraction (if it is a fraction) and this will thus serve as
-separator in the typeset formula. Not used for the first term.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="id11">
-<span id="id10"></span><h2><a class="toc-backref" href="#id84"><span class="docutils literal"><span class="pre">\PolTypeset*{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>Typesets in ascending powers. Use <span class="docutils literal">[&lt;letter&gt;]</span> optional argument
-(after the <span class="docutils literal">*</span>) to use another letter than <span class="docutils literal">x</span>.</p>
-<p>Extended at <span class="docutils literal">0.8</span> to accept general expressions and not only
-polynomial names. Redefine <a class="reference internal" href="#poltoexprinvar">\PolToExprInVar</a> to use in the
-expression another letter than default <span class="docutils literal">x</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="non-expandable-macros-related-to-the-root-localization-routines">
-<h2><a class="toc-backref" href="#id85">Non-expandable macros related to the root localization routines</a></h2>
-<p>As <a class="reference internal" href="#poltosturm-polname-sturmname">\PolToSturm{&lt;polname&gt;}{&lt;sturmname&gt;}</a> and
-<a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{&lt;sturmname&gt;}</a> and variants declare
-additional polynomial or scalar variables with names based on <span class="docutils literal">&lt;sturmname&gt;</span> as
-prefix, it is advisable to keep the <span class="docutils literal">&lt;sturmname&gt;</span> namespace separate from
-the one applying to <span class="docutils literal">\xintexpr</span> variables generally, or to polynomials.</p>
-<div class="section" id="poltosturm-polname-sturmname">
-<span id="poltosturm"></span><h3><a class="toc-backref" href="#id86"><span class="docutils literal"><span class="pre">\PolToSturm{&lt;polname&gt;}{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>With <span class="docutils literal">&lt;polname&gt;</span> being for example <span class="docutils literal">P</span>, and <span class="docutils literal">&lt;sturmname&gt;</span> being
-for example <span class="docutils literal">S</span>, the macro starts by computing the derivative
-<span class="docutils literal">P'</span>, then computes the opposite of the remainder in the euclidean
-division of <span class="docutils literal">P</span> by <span class="docutils literal">P'</span>, then the opposite of the remainder in
-the euclidean division of <span class="docutils literal">P'</span> by the first obtained polynomial,
-etc... Up to signs following the <span class="docutils literal"><span class="pre">--++--++...</span></span> pattern, these are
-the same remainders as in the Euclide algorithm applied to the
-computation of the GCD of <span class="docutils literal">P</span> and <span class="docutils literal">P'</span>.</p>
-<p>The precise process differs from the above description: the
-algorithm first sets <span class="docutils literal">S_0_</span> to be the <em>primitive part</em> of <span class="docutils literal">P</span> and
-<span class="docutils literal">S_1_</span> to be the <em>primitive part</em> of <span class="docutils literal">P'</span> (see
-<a class="reference internal" href="#policontent-polname">\PolIContent{&lt;polname&gt;}</a>), then at each step the remainder is made
-primitive and stored for internal reference as <span class="docutils literal">S_k_</span>, so only
-integer-coefficients polynomials are manipulated.</p>
-<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p>This exact procedure will perhaps in future be replaced by a
-<em>sub-resultant algorithm</em>, which may bring some speed gain in
-obtaining a pseudo-Sturm sequence, but some experimenting is
-needed, in the context of realistically realizable computations
-by the package; primitive polynomials although a bit costly
-have the smallest coefficients hence are the best for the kind of
-computations done for root localization, after having computed a
-Sturm sequence.</p>
-</div>
-<p>The last non-zero primitivized remainder <span class="docutils literal">S_N_</span> is, up to sign,
-the primitive part of the GCD of <span class="docutils literal">P</span> and <span class="docutils literal">P'</span>. Its roots (real
-and complex) are the multiple roots of the original <span class="docutils literal">P</span>. The
-original <span class="docutils literal">P</span> was &quot;square-free&quot; (i.e. did not have multiple real
-or complex roots) if and only if <span class="docutils literal">S_N_</span> is a constant, which is
-then <span class="docutils literal">+1</span> or <span class="docutils literal"><span class="pre">-1</span></span> (its value before primitivization is lost).</p>
-<p>The macro then divides each <span class="docutils literal">S_k_</span> by <span class="docutils literal">S_N_</span> and declares the
-quotients <span class="docutils literal">S_k</span> as user polynomials for future use. By Gauss
-theorem about the contents of integer-coefficients polynomials,
-these <span class="docutils literal">S_k</span> also are primitive integer-coefficients polynomials.</p>
-<p>This step will be referred to as <em>normalization</em>, and in this
-documentation the obtained polynomials are said to constitute the
-&quot;Sturm chain&quot; (or &quot;Sturm sequence&quot;), i.e. by convention the &quot;Sturm
-chain polynomials&quot; are square-free and primitive. The possibly
-non-square-free ones are referred to as <em>non-normalized</em>.</p>
-<p>As an exception to the rule, if the original <span class="docutils literal">P</span> was &quot;square-free&quot;
-(i.e. did not have multiple real or complex roots) then
-normalization is skipped (in that case <span class="docutils literal">S_N_</span> is either <span class="docutils literal">+1</span> or
-<span class="docutils literal"><span class="pre">-1</span></span>), so <span class="docutils literal">S_0_</span> is exactly the primitive part of starting
-polynomial <span class="docutils literal">P</span>, in the &quot;square-free&quot; case.</p>
-<p>The next logical step is to execute <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros{S}</a> or one of its variants. Be careful not to
-use the names <span class="docutils literal">sturmname_0</span>, <span class="docutils literal">sturmname_1</span>, etc... for defining
-other polynomials after having done
-<span class="docutils literal"><span class="pre">\PolToSturm{&lt;polname&gt;}{&lt;sturmname&gt;}</span></span> and before executing
-<span class="docutils literal"><span class="pre">\PolSturmIsolateZeros{&lt;sturmname&gt;}</span></span> or its variants else the
-latter will behave erroneously.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>The declaration of the <span class="docutils literal">S_k</span>'s will overwrite
-with no warning previously declared polynomials with identical
-names <span class="docutils literal">S_k</span>. This is original reason why the macro expects two
-names: <span class="docutils literal">&lt;polname&gt;</span> and <span class="docutils literal">&lt;sturmname&gt;</span>.</p>
-<p>It is allowed to use the polynomial name <span class="docutils literal">P</span> as Sturm chain
-name <span class="docutils literal">S</span>: <span class="docutils literal"><span class="pre">\PolToSturm{f}(f}</span></span>, but of course fusing the
-namespaces is slightly dangerous. And, also <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a> creates variables sharing
-the <span class="docutils literal">&lt;sturmname&gt;</span> prefix, which must be taken into account to
-avoid name clashes.</p>
-</div>
-<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p>The reason why the <span class="docutils literal">S_k</span>'s are declared as polynomials is
-that the associated polynomial functions are needed to compute
-the sign changes in the Sturm sequence evaluated at a given
-location, as this is the basis mechanism of <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a> (on the basis of the <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm theorem</a>).</p>
-<p>It is possible that in future the package will only internally
-construct such polynomial functions and only the starred variant
-will make the normalized (i.e. square-free) Sturm sequence public.</p>
-</div>
-<p>The integer <span class="docutils literal">N</span> giving the length of the Sturm chain <span class="docutils literal">S_0</span>,
-<span class="docutils literal">S_1</span>, ..., <span class="docutils literal">S_N</span> is available as
-<a class="reference internal" href="#polsturmchainlength-sturmname">\PolSturmChainLength{&lt;sturmname&gt;}</a>. If all roots of original <span class="docutils literal">P</span>
-are real, then <span class="docutils literal">N</span> is both the number of distinct real roots and
-the degree of <span class="docutils literal">S_0</span>. In the case of existence of complex roots,
-the number of distinct real roots is at most <span class="docutils literal">N</span> and <span class="docutils literal">N</span> is at
-most the degree of <span class="docutils literal">S_0</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="id13">
-<span id="id12"></span><h3><a class="toc-backref" href="#id87"><span class="docutils literal"><span class="pre">\PolToSturm*{&lt;polname&gt;}{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>Does the same as <a class="reference internal" href="#poltosturm">un-starred version</a> and additionally it
-keeps for user usage the memory of the <em>un-normalized</em> (but still
-made primitive) Sturm chain
-polynomials <span class="docutils literal">sturmname_k_</span>, <span class="docutils literal">k=0,1, <span class="pre">...,</span> N</span>, with
-<span class="docutils literal">N</span> being <a class="reference internal" href="#polsturmchainlength-sturmname">\PolSturmChainLength{&lt;sturmname&gt;}</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="polsturmisolatezeros-sturmname">
-<span id="polsturmisolatezeros"></span><h3><a class="toc-backref" href="#id88"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>The macro locates, using the <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm Theorem</a>, as many disjoint
-intervals as there are distinct real roots.</p>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p>The Sturm chain must have been produced by an earlier
-<a class="reference internal" href="#poltosturm-polname-sturmname">\PolToSturm{&lt;polname&gt;}{&lt;sturmname&gt;}</a>.</p>
-</div>
-<p>After its execution they are two types of such intervals (stored in
-memory and accessible via macros or <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variables, see below):</p>
-<ul class="simple">
-<li><p>singleton <span class="docutils literal">{a}</span>: then <span class="docutils literal">a</span> is a root, (necessarily a decimal
-number, but not all such decimal numbers are exactly identified yet).</p></li>
-<li><p>open intervals <span class="docutils literal">(a,b)</span>: then there is exactly one root <span class="docutils literal">z</span>
-such that <span class="docutils literal">a &lt; z &lt; b</span>, and the end points are guaranteed to not
-be roots.</p></li>
-</ul>
-<p>The interval boundaries are decimal numbers, originating
-in iterated decimal subdivision from initial intervals
-<span class="docutils literal"><span class="pre">(-10^E,</span> 0)</span> and <span class="docutils literal">(0, 10^E)</span> with <span class="docutils literal">E</span> chosen initially large
-enough so that all roots are enclosed; if zero is a root it is always
-identified as such. The non-singleton intervals are of the
-type <span class="docutils literal">(a/10^f, <span class="pre">(a+1)/10^f)</span></span> with <span class="docutils literal">a</span> an integer, which is
-neither <span class="docutils literal">0</span> nor <span class="docutils literal"><span class="pre">-1</span></span>. Hence either <span class="docutils literal">a</span> and <span class="docutils literal">a+1</span> are both positive
-or they are both negative.</p>
-<p>One does not <em>a priori</em> know what will be the lengths of these
-intervals (except that they are always powers of ten), they
-vary depending on how many digits two successive roots have in
-common in their respective decimal expansions.</p>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p>If some two consecutive intervals share an end-point, no
-information is yet gained about the separation between the two
-roots which could at this stage be arbitrarily small.</p>
-<p>See <a class="reference internal" href="#polrefineinterval-sturmname-index">\PolRefineInterval*{&lt;sturmname&gt;}{&lt;index&gt;}</a> which addresses
-this issue.</p>
-</div>
-<p>Let us suppose <span class="docutils literal">&lt;sturmname&gt;</span> is <span class="docutils literal">S</span>.</p>
-<p>The interval boundaries (and exactly found roots) are made available
-for future computations in <span class="docutils literal">\xintexpr/xinteval</span> or <span class="docutils literal">\poldef</span> as
-variables <span class="docutils literal">SL_1</span>, <span class="docutils literal">SL_2</span>, etc..., for the left end-points and
-<span class="docutils literal">SR_1</span>, <span class="docutils literal">SR_2</span>, ..., for the right end-points.</p>
-<p>Additionally, <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variable <span class="docutils literal">SZ_1_isknown</span> will have value
-<span class="docutils literal">1</span> if the root in the first interval is known, and <span class="docutils literal">0</span>
-otherwise. And similarly for the other intervals.</p>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p>The variable declarations are done with no check of existence of
-previously existing variables with identical names.</p>
-</div>
-<p>Also, macros <a class="reference internal" href="#polsturmisolatedzeroleft">\PolSturmIsolatedZeroLeft{&lt;sturmname&gt;}{&lt;index&gt;}</a> and
-<a class="reference internal" href="#polsturmisolatedzeroright-sturmname-index">\PolSturmIsolatedZeroRight{&lt;sturmname&gt;}{&lt;index&gt;}</a> are provided which
-expand to these same values, written in decimal notation (i.e.
-pre-processed by <a class="reference internal" href="#poldectostring">\PolDecToString</a>.) And there
-is also <a class="reference internal" href="#polsturmifzeroexactlyknown-sturmname-index-t-f">\PolSturmIfZeroExactlyKnown{&lt;sturmname&gt;}{&lt;index&gt;}{T}{F}</a>.</p>
-<div class="admonition important">
-<p class="admonition-title">Important</p>
-<p>Trailing zeroes in the stored decimal numbers accessible via the
-macros are significant: they are also present in the decimal
-expansion of the exact root, so as to be able for example to
-print out bounds of real roots with as many digits as is
-significant, even if the digits are zeros.</p>
-</div>
-<p>The start of the decimal expansion of the <span class="docutils literal">&lt;index&gt;</span>-th root is given by
-<a class="reference internal" href="#polsturmisolatedzeroleft">\PolSturmIsolatedZeroLeft{&lt;sturmname&gt;}{&lt;index&gt;}</a> if the root is positive, and by
-<a class="reference internal" href="#polsturmisolatedzeroright">PolSturmIsolatedZeroRight{&lt;sturmname&gt;}{&lt;index&gt;}</a> if the root is neagtive. These two
-decimal numbers are either both zero or both of the same sign.</p>
-<p>The number of distinct roots is obtainable expandably as
-<a class="reference internal" href="#polsturmnbofisolatedzeros-sturmname">\PolSturmNbOfIsolatedZeros{&lt;sturmname&gt;}</a>.</p>
-<p>Furthermore
-<a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value">\PolSturmNbOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualTo{&lt;value&gt;}</a> and
-<a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-num-expr">\PolSturmNbOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualToExpr{&lt;num. expr.&gt;}</a>.
-will expandably compute respectively the number of real roots at
-most equal to <span class="docutils literal">value</span> or <span class="docutils literal">expression</span>, and the same but with
-multiplicities.</p>
-<p>These variables and macros are automatically updated in case of
-subsequent usage of <a class="reference internal" href="#polrefineinterval-sturmname-index">\PolRefineInterval*{&lt;sturmname&gt;}{&lt;index&gt;}</a> or
-other localization improving macros.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>The current polexpr implementation defines the <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variables
-and <a class="reference external" href="https://www.ctan.org/pkg/xint">xinttools</a> arrays as described above with global scope. On the
-other hand the Sturm sequence polynomials obey the current scope.</p>
-<p>This is perhaps a bit inconsistent and may change in future.</p>
-</div>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>The results are exact
-bounds for the mathematically exact real roots.</p>
-<p>Future releases will perhaps also provide macros based on Newton
-or Regula Falsi methods. Exact computations with such methods
-lead however quickly to very big fractions, and this forces usage
-of some rounding scheme for the abscissas if computation times
-are to remain reasonable. This raises issues of its own, which
-are studied in numerical mathematics.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="id15">
-<span id="id14"></span><h3><a class="toc-backref" href="#id89"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros*{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>The macro does the same as <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{&lt;sturmname&gt;}</a> and
-then in addition it does the extra work to determine all
-multiplicities of the real roots.</p>
-<p>After execution,
-<a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index">\PolSturmIsolatedZeroMultiplicity{&lt;sturmname&gt;}{&lt;index&gt;}</a> expands
-to the multiplicity of the root located in the <span class="docutils literal">index</span>-th
-interval (intervals are enumerated from left to right, with index
-starting at <span class="docutils literal">1</span>).</p>
-<p>Furthermore, if for example the <span class="docutils literal">&lt;sturmname&gt;</span> is <span class="docutils literal">S</span>, <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a>
-variables <span class="docutils literal">SM_1</span>, <span class="docutils literal">SM_2</span>... hold the multiplicities thus
-computed.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>Somewhat counter-intuitively, it is not necessary to have
-executed the <a class="reference internal" href="#id12">\PolToSturm*</a> starred variant: during its
-execution, <a class="reference internal" href="#poltosturm">\PolToSturm</a>, even though it does not declare the
-non-square-free Sturm chain polynomials as user-level genuine
-polynomials, stores their data in private macros.</p>
-</div>
-<p>See <span class="docutils literal">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</span> example in <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span>.</p>
-</blockquote>
-<div class="section" id="polsturmisolatezerosandgetmultiplicities-sturmname">
-<span id="polsturmisolatezerosandgetmultiplicities"></span><h4><a class="toc-backref" href="#id90"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndGetMultiplicities{&lt;sturmname&gt;}</span></span></a></h4>
-<blockquote>
-<p>This is another name for <a class="reference internal" href="#id15">\PolSturmIsolateZeros*{&lt;sturmname&gt;}</a>.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="id17">
-<span id="id16"></span><h3><a class="toc-backref" href="#id91"><span class="docutils literal"><span class="pre">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>The macro does the same as <a class="reference internal" href="#id15">\PolSturmIsolateZeros*{&lt;sturmname&gt;}</a> and
-in addition it does the extra work to determine all the <em>rational</em>
-roots.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>After execution of this macro, a root is &quot;known&quot; if and only if
-it is rational.</p>
-</div>
-<p>Furthermore, primitive polynomial <span class="docutils literal">sturmname_sqf_norr</span> is created
-to match the (square-free) <span class="docutils literal">sturmname_0</span> from which all rational
-roots have been removed (see <a class="reference internal" href="#polexprsetup">\polexprsetup</a> for customizing this
-name). The number of distinct rational roots is thus the difference
-between the degrees of these two polynomials (see also
-<a class="reference internal" href="#polsturmnbofrationalroots-sturmname">\PolSturmNbOfRationalRoots{&lt;sturmname&gt;}</a>).</p>
-<p>And <span class="docutils literal">sturmname_norr</span> is <span class="docutils literal">sturmname_0_</span> from which all rational
-roots have been removed (see <a class="reference internal" href="#polexprsetup">\polexprsetup</a>), i.e. it contains
-the irrational roots of the original polynomial, with the same
-multiplicities.</p>
-<p>See <span class="docutils literal">A degree five polynomial with three rational roots</span> in <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span>.</p>
-</blockquote>
-<div class="section" id="polsturmisolatezerosgetmultiplicitiesandrationalroots-sturmname">
-<span id="polsturmisolatezerosgetmultiplicitiesandrationalroots"></span><h4><a class="toc-backref" href="#id92"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{&lt;sturmname&gt;}</span></span></a></h4>
-<blockquote>
-<p>This is another name for <a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a>.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="polsturmisolatezerosandfindrationalroots-sturmname">
-<h3><a class="toc-backref" href="#id93"><span class="docutils literal"><span class="pre">\PolSturmIsolateZerosAndFindRationalRoots{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>This works exactly like <a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a>
-(inclusive of declaring the polynomials <span class="docutils literal">sturmname_sqf_norr</span> and
-<span class="docutils literal">sturmname_norr</span> with no rational roots) except that it does <em>not</em>
-compute the multiplicities of the <em>non-rational</em> roots.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>There is no macro to find the rational roots but not compute
-their multiplicities at the same time.</p>
-</div>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p>This macro does <em>not</em> define <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> variables
-<span class="docutils literal">sturmnameM_1</span>, <span class="docutils literal">sturmnameM_2</span>, ... holding the
-multiplicities and it leaves the multiplicity array (whose accessor
-is <a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index">\PolSturmIsolatedZeroMultiplicity{&lt;sturmname&gt;}{&lt;index&gt;}</a>) into
-a broken state, as all non-rational roots will supposedly have
-multiplicity one. This means that the output of
-<a class="reference internal" href="#id21">\PolPrintIntervals*</a> will be
-erroneous regarding the multiplicities of irrational roots.</p>
-<p>I decided to document it because finding multiplicities of the
-non rational roots is somewhat costly, and one may be interested
-only into finding the rational roots (of course random
-polynomials with integer coefficients will not have <em>any</em>
-rational root anyhow).</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polrefineinterval-sturmname-index">
-<span id="polrefineinterval"></span><h3><a class="toc-backref" href="#id94"><span class="docutils literal"><span class="pre">\PolRefineInterval*{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></h3>
-<blockquote>
-<p>The <span class="docutils literal">index</span>-th interval (starting indexing at one) is further
-subdivided as many times as is necessary in order for the newer
-interval to have both its end-points distinct from the end-points of
-the original interval. As a consequence, the <span class="docutils literal">k</span>th root is then
-strictly separated from the other roots.</p>
-</blockquote>
-</div>
-<div class="section" id="polrefineinterval-n-sturmname-index">
-<span id="polrefineinterval-n"></span><h3><a class="toc-backref" href="#id95"><span class="docutils literal"><span class="pre">\PolRefineInterval[N]{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></h3>
-<blockquote>
-<p>The <span class="docutils literal">index</span>-th interval (starting count at one) is further
-subdivided once, reducing its length by a factor of 10. This is done
-<span class="docutils literal">N</span> times if the optional argument <span class="docutils literal">[N]</span> is present.</p>
-</blockquote>
-</div>
-<div class="section" id="polensureintervallength-sturmname-index-exponent">
-<span id="polensureintervallength"></span><h3><a class="toc-backref" href="#id96"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLength{&lt;sturmname&gt;}{&lt;index&gt;}{&lt;exponent&gt;}</span></span></a></h3>
-<blockquote>
-<p>The <span class="docutils literal">index</span>-th interval is subdivided until its length becomes at
-most <span class="docutils literal">10^E</span>. This means (for <span class="docutils literal">E&lt;0</span>) that the first <span class="docutils literal"><span class="pre">-E</span></span> digits
-after decimal mark of the <span class="docutils literal">k</span>th root will then be known exactly.</p>
-</blockquote>
-</div>
-<div class="section" id="polensureintervallengths-sturmname-exponent">
-<span id="polensureintervallengths"></span><h3><a class="toc-backref" href="#id97"><span class="docutils literal"><span class="pre">\PolEnsureIntervalLengths{&lt;sturmname&gt;}{&lt;exponent&gt;}</span></span></a></h3>
-<blockquote>
-<p>The intervals as obtained from <span class="docutils literal">\PolSturmIsolateZeros</span> are (if
-necessary) subdivided further by (base 10) dichotomy in order for
-each of them to have length at most <span class="docutils literal">10^E</span>.</p>
-<p>This means that decimal expansions of all roots will be known with
-<span class="docutils literal"><span class="pre">-E</span></span> digits (for <span class="docutils literal">E&lt;0</span>) after decimal mark.</p>
-</blockquote>
-</div>
-<div class="section" id="polprintintervals-varname-sturmname">
-<span id="polprintintervals"></span><h3><a class="toc-backref" href="#id98"><span class="docutils literal"><span class="pre">\PolPrintIntervals[&lt;varname&gt;]{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>This is a convenience macro which prints the bounds for the roots
-<span class="docutils literal">Z_1</span>, <span class="docutils literal">Z_2</span>, ... (the optional argument <span class="docutils literal">varname</span> allows to
-specify a replacement for the default <span class="docutils literal">Z</span>). This will be done (by
-default) in a
-math mode <span class="docutils literal">array</span>, one interval per row, and pattern <span class="docutils literal">rcccl</span>,
-where the second and fourth column hold the <span class="docutils literal">&lt;</span> sign, except when
-the interval reduces to a singleton, which means the root is known
-exactly.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>The explanations here and in this section are for LaTeX. With
-other TeX macro formats, the LaTeX syntax such as for example
-<span class="docutils literal"><span class="pre">\begin{array}{rcccl}</span></span> which appears in the documentation here
-is actually replaced with quasi-equivalent direct use of TeX
-primitives.</p>
-</div>
-<p>See next macros which govern its output.</p>
-</blockquote>
-<div class="section" id="polprintintervalsnorealroots">
-<h4><a class="toc-backref" href="#id99"><span class="docutils literal">\PolPrintIntervalsNoRealRoots</span></a></h4>
-<blockquote>
-<p>Executed in place of an <span class="docutils literal">array</span> environment, when there are no
-real roots. Default definition:</p>
-<pre class="literal-block">\newcommand\PolPrintIntervalsNoRealRoots{}</pre>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalsbeginenv">
-<h4><a class="toc-backref" href="#id100"><span class="docutils literal">\PolPrintIntervalsBeginEnv</span></a></h4>
-<blockquote>
-<p>Default definition (given here for LaTeX, Plain has a variant):</p>
-<pre class="literal-block">\newcommand\PolPrintIntervalsBeginEnv{\[\begin{array}{rcccl}}</pre>
-<p>A simpler <span class="docutils literal">center</span> environment provides a straightforward way to
-obtain a display allowing pagebreaks. Of course redefinitions must
-at any rate be kept in sync with <a class="reference internal" href="#polprintintervalsknownroot">\PolPrintIntervalsKnownRoot</a> and
-<a class="reference internal" href="#polprintintervalsunknownroot">\PolPrintIntervalsUnknownRoot</a>.</p>
-<p>Prior to <span class="docutils literal">0.8.6</span> it was not possible to use here for example
-<span class="docutils literal">\begin{align}</span> due to the latter executing twice in contents.</p>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalsendenv">
-<h4><a class="toc-backref" href="#id101"><span class="docutils literal">\PolPrintIntervalsEndEnv</span></a></h4>
-<blockquote>
-<p>Default definition:</p>
-<pre class="literal-block">\newcommand\PolPrintIntervalsEndEnv{\end{array}\]}</pre>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalsrowseparator">
-<h4><a class="toc-backref" href="#id102"><span class="docutils literal">\PolPrintIntervalsRowSeparator</span></a></h4>
-<blockquote>
-<p>Expands by default to <span class="docutils literal">\\</span> with LaTeX and to <span class="docutils literal">\cr</span> with Plain</p>
-<p>Added at <span class="docutils literal">0.8.6</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalsknownroot">
-<h4><a class="toc-backref" href="#id103"><span class="docutils literal">\PolPrintIntervalsKnownRoot</span></a></h4>
-<blockquote>
-<p>Default definition:</p>
-<pre class="literal-block">\newcommand\PolPrintIntervalsKnownRoot{%
- &amp;&amp;\PolPrintIntervalsTheVar_{\PolPrintIntervalsTheIndex}%
- &amp;=&amp;\PolPrintIntervalsPrintExactZero
-}</pre>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalsunknownroot">
-<h4><a class="toc-backref" href="#id104"><span class="docutils literal">\PolPrintIntervalsUnknownRoot</span></a></h4>
-<blockquote>
-<p>Default definition:</p>
-<pre class="literal-block">\newcommand\PolPrintIntervalsUnknownRoot{%
- \PolPrintIntervalsPrintLeftEndPoint&amp;&lt;&amp;%
- \PolPrintIntervalsTheVar_{\PolPrintIntervalsTheIndex}&amp;&lt;&amp;%
- \PolPrintIntervalsPrintRightEndPoint
-}</pre>
-</blockquote>
-</div>
-<div class="section" id="id18">
-<span id="polprintintervalsprintexactzero"></span><h4><a class="toc-backref" href="#id105"><span class="docutils literal">\PolPrintIntervalsPrintExactZero</span></a></h4>
-<blockquote>
-<p>Default definition:</p>
-<pre class="literal-block">\newcommand\PolPrintIntervalsPrintExactZero{\PolPrintIntervalsTheLeftEndPoint}</pre>
-</blockquote>
-</div>
-<div class="section" id="id19">
-<span id="polprintintervalsprintleftendpoint"></span><h4><a class="toc-backref" href="#id106"><span class="docutils literal">\PolPrintIntervalsPrintLeftEndPoint</span></a></h4>
-<blockquote>
-<p>Default definition:</p>
-<pre class="literal-block">\newcommand\PolPrintIntervalsPrintLeftEndPoint{\PolPrintIntervalsTheLeftEndPoint}</pre>
-</blockquote>
-</div>
-<div class="section" id="id20">
-<span id="polprintintervalsprintrightendpoint"></span><h4><a class="toc-backref" href="#id107"><span class="docutils literal">\PolPrintIntervalsPrintRightEndPoint</span></a></h4>
-<blockquote>
-<p>Default definition is:</p>
-<pre class="literal-block">\newcommand\PolPrintIntervalsPrintRightEndPoint{\PolPrintIntervalsTheRightEndPoint}</pre>
-</blockquote>
-</div>
-</div>
-<div class="section" id="id22">
-<span id="id21"></span><h3><a class="toc-backref" href="#id108"><span class="docutils literal"><span class="pre">\PolPrintIntervals*[&lt;varname&gt;]{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>This starred variant produces an alternative output (which
-displays the root multiplicity), and is provided as an
-example of customization.</p>
-<p>As replacement for <a class="reference internal" href="#polprintintervalsknownroot">\PolPrintIntervalsKnownRoot</a>,
-<a class="reference internal" href="#polprintintervalsprintexactzero">\PolPrintIntervalsPrintExactZero</a>,
-<a class="reference internal" href="#polprintintervalsunknownroot">\PolPrintIntervalsUnknownRoot</a> it uses its own
-<span class="docutils literal"><span class="pre">\POL&#64;&#64;PrintIntervals...</span></span> macros. We only reproduce here one
-definition:</p>
-<pre class="literal-block">\newcommand\POL&#64;&#64;PrintIntervalsPrintExactZero{%
- \displaystyle
- \xintTeXsignedFrac{\PolPrintIntervalsTheLeftEndPoint}%
-}%</pre>
-<p>Multiplicities are printed using this auxiliary macro:</p>
-</blockquote>
-<div class="section" id="polprintintervalsprintmultiplicity">
-<h4><a class="toc-backref" href="#id109"><span class="docutils literal">\PolPrintIntervalsPrintMultiplicity</span></a></h4>
-<blockquote>
-<p>whose default definition is:</p>
-<pre class="literal-block">\newcommand\PolPrintIntervalsPrintMultiplicity{(\mbox{mult. }\PolPrintIntervalsTheMultiplicity)}</pre>
-</blockquote>
-</div>
-</div>
-<div class="section" id="polsettosturmchainsignchangesat-foo-sturmname-value">
-<span id="polsettosturmchainsignchangesat"></span><h3><a class="toc-backref" href="#id110"><span class="docutils literal"><span class="pre">\PolSetToSturmChainSignChangesAt{\foo}{&lt;sturmname&gt;}{&lt;value&gt;}</span></span></a></h3>
-<blockquote>
-<p>Sets macro <span class="docutils literal">\foo</span> to store the number of sign changes in the
-already computed normalized Sturm chain with name prefix
-<span class="docutils literal">&lt;sturmname&gt;</span>, at location <span class="docutils literal">&lt;value&gt;</span> (which must be in format as
-acceptable by the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros.)</p>
-<p>The definition is made with global scope. For local scope, use
-<span class="docutils literal">[\empty]</span> as extra optional argument.</p>
-<p>One can use this immediately after creation of the Sturm chain.</p>
-</blockquote>
-</div>
-<div class="section" id="polsettonbofzeroswithin-foo-sturmname-value-left-value-right">
-<span id="polsettonbofzeroswithin"></span><h3><a class="toc-backref" href="#id111"><span class="docutils literal"><span class="pre">\PolSetToNbOfZerosWithin{\foo}{&lt;sturmname&gt;}{&lt;value_left&gt;}{&lt;value_right&gt;}</span></span></a></h3>
-<blockquote>
-<p>Sets, assuming the normalized Sturm chain has been already computed,
-macro <span class="docutils literal">\foo</span> to store the number of roots of <span class="docutils literal">sturmname_0</span> in
-the interval <span class="docutils literal">(value_left, value_right]</span>. The macro first
-re-orders end-points if necessary for <span class="docutils literal">value_left &lt;= value_right</span>
-to hold.</p>
-<p>In accordance to <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm Theorem</a> this is computed as the difference
-between the number of sign changes of the Sturm chain at <span class="docutils literal">value_right</span>
-and the one at <span class="docutils literal">value_left</span>.</p>
-<p>The definition is made with global scope. For local scope, use
-<span class="docutils literal">[\empty]</span> as extra optional argument.</p>
-<p>One can use this immediately after creation of a Sturm chain.</p>
-<p>See also the expandable
-<a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value">\PolSturmNbOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualTo{&lt;value&gt;}</a>,
-which however requires prior execution of <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a>.</p>
-<p>See also the expandable
-<a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value">\PolSturmNbWithMultOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualTo{&lt;value&gt;}</a>
-which requires prior execution of
-<a class="reference internal" href="#id14">\PolSturmIsolateZeros*</a>.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="pollet-polname-2-polname-1">
-<span id="pollet"></span><h2><a class="toc-backref" href="#id112"><span class="docutils literal"><span class="pre">\PolLet{&lt;polname_2&gt;}={&lt;polname_1&gt;}</span></span></a></h2>
-<blockquote>
-<p>Makes a copy of the already defined polynomial <span class="docutils literal">polname_1</span> to a
-new one <span class="docutils literal">polname_2</span>. This has the same effect as
-<span class="docutils literal"><span class="pre">\PolDef{&lt;polname_2&gt;}{&lt;polname_1&gt;(x)}</span></span> or (better)
-<span class="docutils literal"><span class="pre">\PolDef{&lt;polname_2&gt;}{&lt;polname_1&gt;}</span></span> but with less overhead. The
-<span class="docutils literal">=</span> is optional.</p>
-</blockquote>
-</div>
-<div class="section" id="polgloballet-polname-2-polname-1">
-<span id="polgloballet"></span><h2><a class="toc-backref" href="#id113"><span class="docutils literal"><span class="pre">\PolGlobalLet{&lt;polname_2&gt;}={&lt;polname_1&gt;}</span></span></a></h2>
-<blockquote>
-<p>Acts globally.</p>
-</blockquote>
-</div>
-<div class="section" id="polassign-polname-toarray-macro">
-<span id="polassign"></span><h2><a class="toc-backref" href="#id114"><span class="docutils literal"><span class="pre">\PolAssign{&lt;polname&gt;}\toarray\macro</span></span></a></h2>
-<blockquote>
-<p>Defines a one-argument expandable macro <span class="docutils literal"><span class="pre">\macro{#1}</span></span> which expands
-to the (raw) #1th polynomial coefficient.</p>
-<ul class="simple">
-<li><p>Attention, coefficients here are indexed starting at 1. This is
-an unfortunate legacy situation related to the original indexing
-convention in <a class="reference external" href="https://www.ctan.org/pkg/xint">xinttools</a> arrays.</p></li>
-<li><p>With #1=-1, -2, ..., <span class="docutils literal"><span class="pre">\macro{#1}</span></span> returns leading coefficients.</p></li>
-<li><p>With #1=0, returns the number of coefficients, i.e. <span class="docutils literal">1 + deg f</span>
-for non-zero polynomials.</p></li>
-<li><p>Out-of-range #1's return <span class="docutils literal">0/1[0]</span>.</p></li>
-</ul>
-<p>See also <a class="reference internal" href="#polnthcoeff-polname-index">\PolNthCoeff{&lt;polname&gt;}{&lt;index&gt;}</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="polget-polname-fromarray-macro">
-<span id="polget"></span><h2><a class="toc-backref" href="#id115"><span class="docutils literal"><span class="pre">\PolGet{&lt;polname&gt;}\fromarray\macro</span></span></a></h2>
-<blockquote>
-<p>Does the converse operation to
-<span class="docutils literal"><span class="pre">\PolAssign{&lt;polname&gt;}\toarray\macro</span></span>. Each individual
-<span class="docutils literal"><span class="pre">\macro{&lt;value&gt;}</span></span> gets expanded in an <span class="docutils literal">\edef</span> and then normalized
-via <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>'s macro <span class="docutils literal">\xintRaw</span>.</p>
-<p>The leading zeros are removed from the polynomial.</p>
-<p>(contrived) Example:</p>
-<pre class="literal-block">\xintAssignArray{1}{-2}{5}{-3}\to\foo
-\PolGet{f}\fromarray\foo</pre>
-<p>This will define <span class="docutils literal">f</span> as would have <span class="docutils literal">\poldef <span class="pre">f(x):=1-2x+5x^2-3x^3;</span></span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polfromcsv-polname-csv">
-<span id="polfromcsv"></span><h2><a class="toc-backref" href="#id116"><span class="docutils literal"><span class="pre">\PolFromCSV{&lt;polname&gt;}{&lt;csv&gt;}</span></span></a></h2>
-<blockquote>
-<p>Defines a polynomial directly from the comma separated list of values
-(or a macro expanding to such a list) of its coefficients, the <em>first
-item</em> gives the constant term, the <em>last item</em> gives the leading
-coefficient, except if zero, then it is dropped (iteratively). List
-items are each expanded in an <span class="docutils literal">\edef</span> and then put into normalized
-form via <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>'s macro <span class="docutils literal">\xintRaw</span>.</p>
-<p>As leading zero coefficients are removed:</p>
-<pre class="literal-block">\PolFromCSV{f}{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}</pre>
-<p>defines the zero polynomial, which holds only one coefficient.</p>
-<p>See also expandable macro <a class="reference internal" href="#poltocsv-polname">\PolToCSV{&lt;polname&gt;}</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="polmapcoeffs-macro-polname">
-<span id="polmapcoeffs"></span><h2><a class="toc-backref" href="#id117"><span class="docutils literal"><span class="pre">\PolMapCoeffs{\macro}{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>It modifies ('in-place': original coefficients get lost) each
-coefficient of the defined polynomial via the <em>expandable</em> macro
-<span class="docutils literal">\macro</span>. The degree is adjusted as necessary if some leading
-coefficients vanish after the operation.</p>
-<p>In the replacement text of <span class="docutils literal">\macro</span>, <span class="docutils literal">\index</span> expands to the
-coefficient index (starting at zero for the constant term).</p>
-<p>Notice that <span class="docutils literal">\macro</span> will have to handle inputs in the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>
-internal format. This means that it probably will have to be
-expressed in terms of macros from the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> package.</p>
-<p>Example:</p>
-<pre class="literal-block">\def\foo#1{\xintMul{#1}{\the\numexpr\index*\index\relax}}</pre>
-<p>(or with <span class="docutils literal"><span class="pre">\xintSqr{\index}</span></span>) to replace <span class="docutils literal">n</span>-th coefficient
-<span class="docutils literal">f_n</span> by <span class="docutils literal">f_n*n^2</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polreducecoeffs-polname">
-<span id="polreducecoeffs"></span><h2><a class="toc-backref" href="#id118"><span class="docutils literal"><span class="pre">\PolReduceCoeffs{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>Reduces the internal representations of the coefficients to
-their lowest terms.</p>
-</blockquote>
-</div>
-<div class="section" id="id24">
-<span id="id23"></span><h2><a class="toc-backref" href="#id119"><span class="docutils literal"><span class="pre">\PolReduceCoeffs*{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>Reduces the internal representations of the coefficients to their
-lowest terms, but ignoring a possible separated &quot;power of ten part&quot;.</p>
-<p>For example, <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> stores an <span class="docutils literal">30e2/50</span> input as <span class="docutils literal">30/50</span> with
-a separate <span class="docutils literal">10^2</span> part. This will thus get replaced by <span class="docutils literal">3e^2/5</span>
-(or rather whatever <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> uses for internal representation), and
-not by <span class="docutils literal">60</span> as would result from complete reduction.</p>
-<p>Evaluations with polynomials treated by this can be much faster than
-with those handled by the non-starred variant
-<a class="reference internal" href="#polreducecoeffs-polname">\PolReduceCoeffs{&lt;polname&gt;}</a>: as the numerators and denominators
-remain generally smaller.</p>
-</blockquote>
-</div>
-<div class="section" id="polmakemonic-polname">
-<span id="polmakemonic"></span><h2><a class="toc-backref" href="#id120"><span class="docutils literal"><span class="pre">\PolMakeMonic{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>Divides by the leading coefficient. It is recommended to execute
-<a class="reference internal" href="#id24">\PolReduceCoeffs*{&lt;polname&gt;}</a> immediately afterwards. This is not
-done automatically, in case the original polynomial had integer
-coefficients and the user wants to keep the leading one as common
-denominator for typesetting purposes.</p>
-</blockquote>
-</div>
-<div class="section" id="polmakeprimitive-polname">
-<span id="polmakeprimitive"></span><h2><a class="toc-backref" href="#id121"><span class="docutils literal"><span class="pre">\PolMakePrimitive{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>Divides by the integer content see (<a class="reference internal" href="#policontent">\PolIContent</a>).
-This thus produces a polynomial with integer
-coefficients having no common factor. The sign of the leading
-coefficient is not modified.</p>
-</blockquote>
-</div>
-<div class="section" id="poldiff-polname-1-polname-2">
-<span id="poldiff"></span><h2><a class="toc-backref" href="#id122"><span class="docutils literal"><span class="pre">\PolDiff{&lt;polname_1&gt;}{&lt;polname_2&gt;}</span></span></a></h2>
-<blockquote>
-<p>This sets <span class="docutils literal">polname_2</span> to the first derivative of <span class="docutils literal">polname_1</span>. It
-is allowed to issue <span class="docutils literal"><span class="pre">\PolDiff{f}{f}</span></span>, effectively replacing <span class="docutils literal">f</span>
-by <span class="docutils literal">f'</span>.</p>
-<p>Coefficients of the result <span class="docutils literal">polname_2</span> are irreducible fractions
-(see <a class="reference internal" href="#technicalities">Technicalities</a> for the whole story.)</p>
-</blockquote>
-</div>
-<div class="section" id="poldiff-n-polname-1-polname-2">
-<span id="poldiff-n"></span><h2><a class="toc-backref" href="#id123"><span class="docutils literal"><span class="pre">\PolDiff[N]{&lt;polname_1&gt;}{&lt;polname_2&gt;}</span></span></a></h2>
-<blockquote>
-<p>This sets <span class="docutils literal">polname_2</span> to the <span class="docutils literal">N</span>-th derivative of <span class="docutils literal">polname_1</span>.
-Identical arguments is allowed. With <span class="docutils literal">N=0</span>, same effect as
-<span class="docutils literal"><span class="pre">\PolLet{&lt;polname_2&gt;}={&lt;polname_1&gt;}</span></span>. With negative <span class="docutils literal">N</span>, switches to
-using <span class="docutils literal">\PolAntiDiff</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polantidiff-polname-1-polname-2">
-<span id="polantidiff"></span><h2><a class="toc-backref" href="#id124"><span class="docutils literal"><span class="pre">\PolAntiDiff{&lt;polname_1&gt;}{&lt;polname_2&gt;}</span></span></a></h2>
-<blockquote>
-<p>This sets <span class="docutils literal">polname_2</span> to the primitive of <span class="docutils literal">polname_1</span> vanishing
-at zero.</p>
-<p>Coefficients of the result <span class="docutils literal">polname_2</span> are irreducible fractions
-(see <a class="reference internal" href="#technicalities">Technicalities</a> for the whole story.)</p>
-</blockquote>
-</div>
-<div class="section" id="polantidiff-n-polname-1-polname-2">
-<span id="polantidiff-n"></span><h2><a class="toc-backref" href="#id125"><span class="docutils literal"><span class="pre">\PolAntiDiff[N]{&lt;polname_1&gt;}{&lt;polname_2&gt;}</span></span></a></h2>
-<blockquote>
-<p>This sets <span class="docutils literal">polname_2</span> to the result of <span class="docutils literal">N</span> successive integrations on
-<span class="docutils literal">polname_1</span>. With negative <span class="docutils literal">N</span>, it switches to using <span class="docutils literal">\PolDiff</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="poldivide-polname-1-polname-2-polname-q-polname-r">
-<span id="poldivide"></span><h2><a class="toc-backref" href="#id126"><span class="docutils literal"><span class="pre">\PolDivide{&lt;polname_1&gt;}{&lt;polname_2&gt;}{&lt;polname_Q&gt;}{&lt;polname_R&gt;}</span></span></a></h2>
-<blockquote>
-<p>This sets <span class="docutils literal">polname_Q</span> and <span class="docutils literal">polname_R</span> to be the quotient and
-remainder in the Euclidean division of <span class="docutils literal">polname_1</span> by
-<span class="docutils literal">polname_2</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polquo-polname-1-polname-2-polname-q">
-<span id="polquo"></span><h2><a class="toc-backref" href="#id127"><span class="docutils literal"><span class="pre">\PolQuo{&lt;polname_1&gt;}{&lt;polname_2&gt;}{&lt;polname_Q&gt;}</span></span></a></h2>
-<blockquote>
-<p>This sets <span class="docutils literal">polname_Q</span> to be the quotient in the Euclidean division
-of <span class="docutils literal">polname_1</span> by <span class="docutils literal">polname_2</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polrem-polname-1-polname-2-polname-r">
-<span id="polrem"></span><h2><a class="toc-backref" href="#id128"><span class="docutils literal"><span class="pre">\PolRem{&lt;polname_1&gt;}{&lt;polname_2&gt;}{&lt;polname_R&gt;}</span></span></a></h2>
-<blockquote>
-<p>This sets <span class="docutils literal">polname_R</span> to be the remainder in the Euclidean division
-of <span class="docutils literal">polname_1</span> by <span class="docutils literal">polname_2</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polgcd-polname-1-polname-2-polname-gcd">
-<span id="polgcd"></span><h2><a class="toc-backref" href="#id129"><span class="docutils literal"><span class="pre">\PolGCD{&lt;polname_1&gt;}{&lt;polname_2&gt;}{&lt;polname_GCD&gt;}</span></span></a></h2>
-<blockquote>
-<p>This sets <span class="docutils literal">polname_GCD</span> to be the (monic) GCD of <span class="docutils literal">polname_1</span>
-and <span class="docutils literal">polname_2</span>. It is a unitary polynomial except if both
-<span class="docutils literal">polname_1</span> and <span class="docutils literal">polname_2</span> vanish, then <span class="docutils literal">polname_GCD</span> is the
-zero polynomial.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="expandable-macros">
-<h1><a class="toc-backref" href="#id130">Expandable macros</a></h1>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>At <span class="docutils literal">0.8</span> <span class="docutils literal">polexpr</span> is usable with Plain TeX and not only with
-LaTeX. Some examples given in this section may be using LaTeX syntax
-such as <span class="docutils literal">\renewcommand</span>. Convert to TeX primitives as appropriate
-if testing with a non LaTeX macro format.</p>
-</div>
-<p>These macros expand completely in two steps except <span class="docutils literal">\PolToExpr</span> and
-<span class="docutils literal">\PolToFloatExpr</span> which need a <span class="docutils literal">\write</span>, <span class="docutils literal">\edef</span> or a
-<span class="docutils literal"><span class="pre">\csname...\endcsname</span></span> context.</p>
-<div class="section" id="poltoexpr-pol-expr">
-<span id="poltoexpr"></span><h2><a class="toc-backref" href="#id131"><span class="docutils literal"><span class="pre">\PolToExpr{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>Produces expandably <a class="footnote-reference brackets" href="#id26" id="id25">4</a> the string <span class="docutils literal"><span class="pre">coeff_N*x^N+...</span></span>, i.e. the
-polynomial is using descending powers.</p>
-<dl class="footnote brackets">
-<dt class="label" id="id26"><span class="brackets"><a class="fn-backref" href="#id25">4</a></span></dt>
-<dd><p>requires exhaustive expansion, for example as triggered by
-<span class="docutils literal">\write</span> or <span class="docutils literal">\edef</span>.</p>
-</dd>
-</dl>
-<p>Since <span class="docutils literal">0.8</span> the input is not restricted to be a polynomial name but
-is allowed to be an arbitrary expression. Then <span class="docutils literal">x</span> is expected as
-indeterminate but this can be customized via <a class="reference internal" href="#poltoexprinvar">\PolToExprInVar</a>.</p>
-<p>The output uses the letter <span class="docutils literal">x</span> by default, this is customizable
-via <a class="reference internal" href="#poltoexprvar">\PolToExprVar</a>. The default output is compatible both with</p>
-<ul class="simple">
-<li><p>the Maple's input format,</p></li>
-<li><p>and the PSTricks <span class="docutils literal">\psplot[algebraic]</span> input format.</p></li>
-</ul>
-<p>Attention that it is not compatible with Python, see further
-<a class="reference internal" href="#poltoexprcaret">\PolToExprCaret</a> in this context.</p>
-<p>The following applies:</p>
-<ul class="simple">
-<li><p>vanishing coefficients are skipped (issue <span class="docutils literal">\poltoexpralltrue</span> to
-override this and produce output such as <span class="docutils literal">x^3+0*x^2+0*x^1+0</span>),</p></li>
-<li><p>negative coefficients are not prefixed by a <span class="docutils literal">+</span> sign (else,
-Maple would not be happy),</p></li>
-<li><p>coefficients numerically equal to <span class="docutils literal">1</span> (or <span class="docutils literal"><span class="pre">-1</span></span>) are present
-only via their sign,</p></li>
-<li><p>the letter <span class="docutils literal">x</span> is used and the degree one monomial is output as
-<span class="docutils literal">x</span>, not as <span class="docutils literal">x^1</span>.</p></li>
-<li><p>(<span class="docutils literal">0.8</span>) the caret <span class="docutils literal">^</span> is of catcode 12. This means that one
-can for convenience typeset in regular text mode, for example
-using <span class="docutils literal">\texttt</span> (in LaTeX). But TeX will not know how to break
-the expression across end-of-lines anyhow. Formerly <span class="docutils literal">^</span> was
-suitable for math mode but as the exponent is not braced this
-worked only for polynomials of degrees at most 9. Anyhow this
-is not supposed to be a typesetting macro.</p></li>
-</ul>
-<p>Complete customization is possible, see the next macros. Any user
-redefinition must maintain the expandability property.</p>
-</blockquote>
-<div class="section" id="id27">
-<span id="poltoexprvar"></span><h3><a class="toc-backref" href="#id132"><span class="docutils literal">\PolToExprVar</span></a></h3>
-<blockquote>
-<p>Defaults to <span class="docutils literal">x</span>. The letter used in the macro output.</p>
-</blockquote>
-</div>
-<div class="section" id="poltoexprinvar">
-<h3><a class="toc-backref" href="#id133"><span class="docutils literal">\PolToExprInVar</span></a></h3>
-<blockquote>
-<p>Defaults to <span class="docutils literal">x</span>: the letter used as the polynomial indeterminate
-in the macro input.</p>
-<p>Recall that declared polynomials are more efficiently used in
-algebraic expressions without the <span class="docutils literal">(x)</span>, i.e. <span class="docutils literal">P*Q</span> is better
-than <span class="docutils literal"><span class="pre">P(x)*Q(x)</span></span>. Thus the input, even if an expression, does not
-have to contain any <span class="docutils literal">x</span>.</p>
-<p>(new with <span class="docutils literal">0.8</span>)</p>
-</blockquote>
-</div>
-<div class="section" id="id28">
-<span id="poltoexprtimes"></span><h3><a class="toc-backref" href="#id134"><span class="docutils literal">\PolToExprTimes</span></a></h3>
-<blockquote>
-<p>Defaults to <span class="docutils literal">*</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="poltoexprcaret">
-<h3><a class="toc-backref" href="#id135"><span class="docutils literal">\PolToExprCaret</span></a></h3>
-<blockquote>
-<p>Defaults to <span class="docutils literal">^</span> of catcode 12. Set it to
-expand to <span class="docutils literal">**</span> for Python compatible output.</p>
-<p>(new with <span class="docutils literal">0.8</span>)</p>
-</blockquote>
-</div>
-<div class="section" id="poltoexprcmd-raw-coeff">
-<span id="poltoexprcmd"></span><h3><a class="toc-backref" href="#id136"><span class="docutils literal"><span class="pre">\PolToExprCmd{&lt;raw_coeff&gt;}</span></span></a></h3>
-<blockquote>
-<p>Defaults to <span class="docutils literal"><span class="pre">\xintPRaw{\xintRawWithZeros{#1}}</span></span>.</p>
-<p>This means that the coefficient value is printed-out as a fraction
-<span class="docutils literal">a/b</span>, skipping the <span class="docutils literal">/b</span> part if <span class="docutils literal">b</span> turns out to be one.</p>
-<p>Configure it to be <span class="docutils literal"><span class="pre">\xintPRaw{\xintIrr{#1}}</span></span> if the fractions
-must be in irreducible terms.</p>
-<p>An alternative is <span class="docutils literal"><span class="pre">\xintDecToString{\xintREZ{#1}}</span></span> which uses
-integer or decimal fixed point format such as <span class="docutils literal">23.0071</span> if the
-internal representation of the number only has a power of ten as
-denominator (the effect of <span class="docutils literal">\xintREZ</span> here is to remove trailing
-decimal zeros). The behaviour of <span class="docutils literal">\xintDecToString</span> is not yet
-stable for other cases, and for example at time of writing no
-attempt is made to identify inputs having a finite decimal expansion
-so for example <span class="docutils literal">23.007/2</span> or <span class="docutils literal">23.007/25</span> can appear in output
-and not their finite decimal expansion with no denominator.</p>
-</blockquote>
-</div>
-<div class="section" id="poltoexproneterm-raw-coeff-exponent">
-<span id="poltoexproneterm"></span><h3><a class="toc-backref" href="#id137"><span class="docutils literal"><span class="pre">\PolToExprOneTerm{&lt;raw_coeff&gt;}{&lt;exponent&gt;}</span></span></a></h3>
-<blockquote>
-<p>This is the macro which from the coefficient and the exponent
-produces the corresponding term in output, such as <span class="docutils literal">2/3*x^7</span>.</p>
-<p>For its default definition, see the source code. It uses
-<a class="reference internal" href="#poltoexprcmd">\PolToExprCmd</a>, <a class="reference internal" href="#poltoexprtimes">\PolToExprTimes</a>, <a class="reference internal" href="#poltoexprvar">\PolToExprVar</a> and
-<a class="reference internal" href="#poltoexprcaret">\PolToExprCaret</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="poltoexpronetermstylea-raw-coeff-exponent">
-<span id="poltoexpronetermstylea"></span><h3><a class="toc-backref" href="#id138"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleA{&lt;raw_coeff&gt;}{&lt;exponent&gt;}</span></span></a></h3>
-<blockquote>
-<p>This holds the default package meaning of <span class="docutils literal">\PolToExprOneTerm</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="poltoexpronetermstyleb-raw-coeff-exponent">
-<span id="poltoexpronetermstyleb"></span><h3><a class="toc-backref" href="#id139"><span class="docutils literal"><span class="pre">\PolToExprOneTermStyleB{&lt;raw_coeff&gt;}{&lt;exponent&gt;}</span></span></a></h3>
-<blockquote>
-<p>This holds an alternative meaning, which puts the fractional part of
-a coefficient after the monomial, i.e. like this:</p>
-<pre class="literal-block">2*x^11/3+3*x^8/7-x^5-x^4/4-x^3-x^2/2-2*x+1</pre>
-<p><a class="reference internal" href="#poltoexprcmd">\PolToExprCmd</a> isn't used at all in this style. But
-<a class="reference internal" href="#poltoexprtimes">\PolToExprTimes</a>, <a class="reference internal" href="#poltoexprvar">\PolToExprVar</a> and <a class="reference internal" href="#poltoexprcaret">\PolToExprCaret</a> are obeyed.</p>
-<p>To activate it use <span class="docutils literal">\let\PolToExprOneTerm\PolToExprOneTermStyleB</span>.
-To revert to the package default behaviour, issue
-<span class="docutils literal">\let\PolToExprOneTerm\PolToExprOneTermStyleA</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="poltoexprtermprefix-raw-coeff">
-<span id="poltoexprtermprefix"></span><h3><a class="toc-backref" href="#id140"><span class="docutils literal"><span class="pre">\PolToExprTermPrefix{&lt;raw_coeff&gt;}</span></span></a></h3>
-<blockquote>
-<p>It receives as argument the coefficient. Its default behaviour is
-to produce a <span class="docutils literal">+</span> if the coefficient is positive, which will thus
-serve to separate the monomials in the output. This is to match
-the default for <a class="reference internal" href="#poltoexprcmd-raw-coeff">\PolToExprCmd{&lt;raw_coeff&gt;}</a> which in case of a
-positive coefficient does not output an explicit <span class="docutils literal">+</span> prefix.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="poltofloatexpr-pol-expr">
-<span id="poltofloatexpr"></span><h2><a class="toc-backref" href="#id141"><span class="docutils literal"><span class="pre">\PolToFloatExpr{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>Similar to <a class="reference internal" href="#poltoexpr-pol-expr">\PolToExpr{&lt;pol. expr.&gt;}</a> but using
-<a class="reference internal" href="#poltofloatexprcmd-raw-coeff">\PolToFloatExprCmd{&lt;raw_coeff&gt;}</a> which by default rounds and
-converts the coefficients to floating point format.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>This is unrelated to <a class="reference internal" href="#polgenfloatvariant-polname">\PolGenFloatVariant{&lt;polname&gt;}</a>:
-<a class="reference internal" href="#poltofloatexprcmd-raw-coeff">\PolToFloatExprCmd{&lt;raw_coeff&gt;}</a> operates on the <em>exact</em>
-coefficients anew (and may thus produce something else than
-the coefficients of the polynomial function acting
-in <span class="docutils literal">\xintfloateval</span> if the floating point precision was changed
-in between).</p>
-</div>
-<p>Extended at <span class="docutils literal">0.8</span> to accept general expressions as input.</p>
-</blockquote>
-<div class="section" id="poltofloatexproneterm-raw-coeff-exponent">
-<span id="poltofloatexproneterm"></span><h3><a class="toc-backref" href="#id142"><span class="docutils literal"><span class="pre">\PolToFloatExprOneTerm{&lt;raw_coeff&gt;}{&lt;exponent&gt;}</span></span></a></h3>
-<blockquote>
-<p>Similar to <a class="reference internal" href="#poltoexproneterm-raw-coeff-exponent">\PolToExprOneTerm{&lt;raw_coeff&gt;}{&lt;exponent&gt;}</a>. But does not treat
-especially coefficients equal to plus or minus one.</p>
-</blockquote>
-</div>
-<div class="section" id="poltofloatexprcmd-raw-coeff">
-<span id="poltofloatexprcmd"></span><h3><a class="toc-backref" href="#id143"><span class="docutils literal"><span class="pre">\PolToFloatExprCmd{&lt;raw_coeff&gt;}</span></span></a></h3>
-<blockquote>
-<p>The one-argument macro used by <span class="docutils literal">\PolToFloatExprOneTerm</span>.
-It defaults to <span class="docutils literal"><span class="pre">\xintPFloat{#1}</span></span>, which trims trailing
-zeroes.</p>
-<p><em>changed at 0.8.2</em> Formerly it was using <span class="docutils literal">\xintFloat</span>.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="id30">
-<span id="id29"></span><h2><a class="toc-backref" href="#id144"><span class="docutils literal"><span class="pre">\PolToExpr*{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>Ascending powers: <span class="docutils literal"><span class="pre">coeff_0+coeff_1*x+coeff_2*x^2+...</span></span>.</p>
-<p>Extended at <span class="docutils literal">0.8</span> to accept general expressions as input.</p>
-<p>Customizable with the same macros as for
-<a class="reference internal" href="#poltoexpr-pol-expr">\PolToExpr{&lt;pol. expr.&gt;}</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="id32">
-<span id="id31"></span><h2><a class="toc-backref" href="#id145"><span class="docutils literal"><span class="pre">\PolToFloatExpr*{&lt;pol.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>Ascending powers.</p>
-<p>Extended at <span class="docutils literal">0.8</span> to accept general expressions as input.</p>
-</blockquote>
-</div>
-<div class="section" id="polnthcoeff-polname-index">
-<span id="polnthcoeff"></span><h2><a class="toc-backref" href="#id146"><span class="docutils literal"><span class="pre">\PolNthCoeff{&lt;polname&gt;}{&lt;index&gt;}</span></span></a></h2>
-<blockquote>
-<p>It expands to the raw <span class="docutils literal">N</span>-th coefficient (<span class="docutils literal">N=0</span> corresponds to
-the constant coefficient). If <span class="docutils literal">N</span> is out of range, zero (in its
-default <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> format <span class="docutils literal">0/1[0]</span>) is returned.</p>
-<p>Negative indices <span class="docutils literal"><span class="pre">N=-1</span></span>, <span class="docutils literal"><span class="pre">-2</span></span>, ... return the leading
-coefficient, sub-leading coefficient, ..., and finally <span class="docutils literal">0/1[0]</span>
-for <span class="docutils literal"><span class="pre">N&lt;-1-degree</span></span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polleadingcoeff-polname">
-<span id="polleadingcoeff"></span><h2><a class="toc-backref" href="#id147"><span class="docutils literal"><span class="pre">\PolLeadingCoeff{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>Expands to the leading coefficient.</p>
-</blockquote>
-</div>
-<div class="section" id="poldegree-polname">
-<span id="poldegree"></span><h2><a class="toc-backref" href="#id148"><span class="docutils literal"><span class="pre">\PolDegree{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>It expands to the degree. This is <span class="docutils literal"><span class="pre">-1</span></span> if zero polynomial but this
-may change in future. Should it then expand to <span class="docutils literal"><span class="pre">-\infty</span></span> ?</p>
-</blockquote>
-</div>
-<div class="section" id="policontent-polname">
-<span id="policontent"></span><h2><a class="toc-backref" href="#id149"><span class="docutils literal"><span class="pre">\PolIContent{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>It expands to the contents of the polynomial, i.e. to the positive
-fraction such that dividing by this fraction produces a polynomial
-with integer coefficients having no common prime divisor.</p>
-<p>See <a class="reference internal" href="#polmakeprimitive">\PolMakePrimitive</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="poltolist-polname">
-<span id="poltolist"></span><h2><a class="toc-backref" href="#id150"><span class="docutils literal"><span class="pre">\PolToList{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>Expands to <span class="docutils literal"><span class="pre">{coeff_0}{coeff_1}...{coeff_N}</span></span> with <span class="docutils literal">N</span> = degree, and
-<span class="docutils literal">coeff_N</span> the leading coefficient
-(the zero polynomial does give <span class="docutils literal">{0/1[0]}</span> and not an
-empty output.)</p>
-</blockquote>
-</div>
-<div class="section" id="poltocsv-polname">
-<span id="poltocsv"></span><h2><a class="toc-backref" href="#id151"><span class="docutils literal"><span class="pre">\PolToCSV{&lt;polname&gt;}</span></span></a></h2>
-<blockquote>
-<p>Expands to <span class="docutils literal">coeff_0, coeff_1, coeff_2, <span class="pre">.....,</span> coeff_N</span>, starting
-with constant term and ending with leading coefficient. Converse
-to <a class="reference internal" href="#polfromcsv-polname-csv">\PolFromCSV{&lt;polname&gt;}{&lt;csv&gt;}</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="poleval-polname-atexpr-num-expr">
-<span id="polevalatexpr"></span><h2><a class="toc-backref" href="#id152"><span class="docutils literal"><span class="pre">\PolEval{&lt;polname&gt;}\AtExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>Same output as
-<span class="docutils literal">\xinteval{polname(numerical expression)}</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="poleval-polname-at-value">
-<span id="polevalat"></span><h2><a class="toc-backref" href="#id153"><span class="docutils literal"><span class="pre">\PolEval{&lt;polname&gt;}\At{&lt;value&gt;}</span></span></a></h2>
-<blockquote>
-<p>Evaluates the polynomial at the given value which must be in (or
-expand to) a format acceptable to the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros.</p>
-</blockquote>
-</div>
-<div class="section" id="polevalreduced-polname-atexpr-num-expr">
-<span id="polevalreducedatexpr"></span><h2><a class="toc-backref" href="#id154"><span class="docutils literal"><span class="pre">\PolEvalReduced{&lt;polname&gt;}\AtExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>Same output as <span class="docutils literal">\xinteval{reduce(polname(numerical <span class="pre">expression))}</span></span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polevalreduced-polname-at-value">
-<span id="polevalreducedat"></span><h2><a class="toc-backref" href="#id155"><span class="docutils literal"><span class="pre">\PolEvalReduced{&lt;polname&gt;}\At{&lt;value&gt;}</span></span></a></h2>
-<blockquote>
-<p>Evaluates the polynomial at the value which must be in (or expand
-to) a format acceptable to the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros, and outputs an
-irreducible fraction.</p>
-</blockquote>
-</div>
-<div class="section" id="polfloateval-polname-atexpr-num-expr">
-<span id="polfloatevalatexpr"></span><h2><a class="toc-backref" href="#id156"><span class="docutils literal"><span class="pre">\PolFloatEval{&lt;polname&gt;}\AtExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></h2>
-<blockquote>
-<p>Same output as <span class="docutils literal">\xintfloateval{polname(numerical expression)}</span>.</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#polgenfloatvariant">\PolGenFloatVariant</a> must have
-been issued before.</p>
-</div>
-<p>To use the <em>exact coefficients</em> with <em>exactly executed</em> additions
-and multiplications and do the rounding only as the final last step,
-the following syntax can be used: <a class="footnote-reference brackets" href="#id34" id="id33">5</a></p>
-<pre class="literal-block">\xintfloateval{3.27*\xintexpr f(2.53)\relax^2}</pre>
-<dl class="footnote brackets">
-<dt class="label" id="id34"><span class="brackets"><a class="fn-backref" href="#id33">5</a></span></dt>
-<dd><p>Cf. <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> documentation about nested expressions.</p>
-</dd>
-</dl>
-</blockquote>
-</div>
-<div class="section" id="polfloateval-polname-at-value">
-<span id="polfloatevalat"></span><h2><a class="toc-backref" href="#id157"><span class="docutils literal"><span class="pre">\PolFloatEval{&lt;polname&gt;}\At{&lt;value&gt;}</span></span></a></h2>
-<blockquote>
-<p>Evaluates the polynomial at the value which must be in (or expand
-to) a format acceptable to the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros.</p>
-</blockquote>
-</div>
-<div class="section" id="expandable-macros-related-to-the-root-localization-routines">
-<h2><a class="toc-backref" href="#id158">Expandable macros related to the root localization routines</a></h2>
-<div class="section" id="polsturmchainlength-sturmname">
-<span id="polsturmchainlength"></span><h3><a class="toc-backref" href="#id159"><span class="docutils literal"><span class="pre">\PolSturmChainLength{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>Returns the integer <span class="docutils literal">N</span> such that <span class="docutils literal">sturmname_N</span> is the last one
-in the Sturm chain <span class="docutils literal">sturmname_0</span>, <span class="docutils literal">sturmname_1</span>, ...</p>
-<p>See <a class="reference internal" href="#poltosturm-polname-sturmname">\PolToSturm{&lt;polname&gt;}{&lt;sturmname&gt;}</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="polsturmifzeroexactlyknown-sturmname-index-t-f">
-<span id="polsturmifzeroexactlyknown"></span><h3><a class="toc-backref" href="#id160"><span class="docutils literal"><span class="pre">\PolSturmIfZeroExactlyKnown{&lt;sturmname&gt;}{&lt;index&gt;}{T}{F}</span></span></a></h3>
-<blockquote>
-<p>Executes <span class="docutils literal">T</span> if the <span class="docutils literal">index</span>-th interval reduces to a singleton,
-i.e. the root is known exactly, else <span class="docutils literal">F</span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polsturmisolatedzeroleft-sturmname-index">
-<span id="polsturmisolatedzeroleft"></span><h3><a class="toc-backref" href="#id161"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroLeft{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the left end-point for the <span class="docutils literal">index</span>-th interval, as
-computed by some earlier <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{&lt;sturmname&gt;}</a>.</p>
-<div class="admonition note">
-<p class="admonition-title">Note</p>
-<p>Execution of this macro after some
-<a class="reference internal" href="#polrefineinterval-n">\PolRefineInterval{&lt;sturmname&gt;}{&lt;index&gt;}</a>
-will take into account the now known tighter bounds.</p>
-</div>
-<p>The value is pre-formatted using <a class="reference internal" href="#poldectostring">\PolDecTostring</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="polsturmisolatedzeroright-sturmname-index">
-<span id="polsturmisolatedzeroright"></span><h3><a class="toc-backref" href="#id162"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroRight{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the right end-point for the <span class="docutils literal">index</span>-th interval as
-computed by some earlier <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{&lt;sturmname&gt;}</a> and
-possibly refined afterwards.</p>
-<p>The value is pre-formatted using <a class="reference internal" href="#poldectostring">\PolDecTostring</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="polsturmisolatedzeromultiplicity-sturmname-index">
-<span id="polsturmisolatedzeromultiplicity"></span><h3><a class="toc-backref" href="#id163"><span class="docutils literal"><span class="pre">\PolSturmIsolatedZeroMultiplicity{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the multiplicity of the unique root contained in the
-<span class="docutils literal">index</span>-th interval.</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p>A prior execution of <a class="reference internal" href="#id15">\PolSturmIsolateZeros*{&lt;sturmname&gt;}</a> is mandatory.</p>
-</div>
-<p>See <span class="docutils literal">The degree nine polynomial with 0.99, 0.999, 0.9999 as triple roots</span> in <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span>.</p>
-</blockquote>
-</div>
-<div class="section" id="polsturmnbofisolatedzeros-sturmname">
-<span id="polsturmnbofisolatedzeros"></span><h3><a class="toc-backref" href="#id164"><span class="docutils literal"><span class="pre">\PolSturmNbOfIsolatedZeros{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the number of real roots of the polynomial
-<span class="docutils literal">&lt;sturmname&gt;_0</span>, i.e. the number of distinct real roots of the
-polynomial originally used to create the Sturm chain via
-<a class="reference internal" href="#poltosturm-polname-sturmname">\PolToSturm{&lt;polname&gt;}{&lt;sturmname&gt;}</a>.</p>
-</blockquote>
-<div class="admonition warning">
-<p class="admonition-title">Warning</p>
-<p>The next few macros counting roots, with or without multiplicities,
-less than or equal to some value, are under evaluation and may be
-removed from the package if their utility is judged to be not high
-enough. They can be re-coded at user level on the basis of the other
-documented package macros anyway.</p>
-</div>
-</div>
-<div class="section" id="polsturmnbofrootsof-sturmname-lessthanorequalto-value">
-<h3><a class="toc-backref" href="#id165"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualTo{&lt;value&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the number of distinct roots (of the polynomial used to
-create the Sturm chain) less than or equal to the <span class="docutils literal">value</span> (i.e. a
-number of fraction recognizable by the <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> macros).</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{&lt;sturmname&gt;}</a> must have been executed
-beforehand.</p>
-<p>And the argument is a <span class="docutils literal">&lt;sturmname&gt;</span>, not a <span class="docutils literal">&lt;polname&gt;</span> (this is
-why the macro contains Sturm in its name), simply to be reminded
-of the above constraint.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-num-expr">
-<span id="polsturmnbofrootsof"></span><h3><a class="toc-backref" href="#id166"><span class="docutils literal"><span class="pre">\PolSturmNbOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualToExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the number of distinct roots (of the polynomial
-used to create the Sturm chain) which are less than or equal to the
-given numerical expression.</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{&lt;sturmname&gt;}</a> must have been executed
-beforehand.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value">
-<h3><a class="toc-backref" href="#id167"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualTo{&lt;value&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the number counted with multiplicities of the roots (of
-the polynomial used to create the Sturm chain) which are less than
-or equal to the given <span class="docutils literal">value</span>.</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#id15">\PolSturmIsolateZeros*{&lt;sturmname&gt;}</a> (or the double starred
-variant) must have been executed beforehand.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polsturmnbwithmultofrootsof-sturmname-lessthanorequaltoexpr-num-expr">
-<h3><a class="toc-backref" href="#id168"><span class="docutils literal"><span class="pre">\PolSturmNbWithMultOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualToExpr{&lt;num.</span> <span class="pre">expr.&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the total number of roots (counted with multiplicities)
-which are less than or equal to the given <span class="docutils literal">expression</span>.</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#id15">\PolSturmIsolateZeros*{&lt;sturmname&gt;}</a> (or the double starred
-variant) must have been executed beforehand.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polsturmnbofrationalroots-sturmname">
-<h3><a class="toc-backref" href="#id169"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRoots{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the number of rational roots (without multiplicities).</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a> must have been executed
-beforehand.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polsturmnbofrationalrootswithmultiplicities-sturmname">
-<h3><a class="toc-backref" href="#id170"><span class="docutils literal"><span class="pre">\PolSturmNbOfRationalRootsWithMultiplicities{&lt;sturmname&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the number of rational roots (counted with multiplicities).</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a> must have been executed
-beforehand.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polsturmrationalroot-sturmname-k">
-<h3><a class="toc-backref" href="#id171"><span class="docutils literal"><span class="pre">\PolSturmRationalRoot{&lt;sturmname&gt;}{&lt;k&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the k-th rational root. They are enumerated from left to
-right starting at index value <span class="docutils literal">1</span>.</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a> must have been executed
-beforehand.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polsturmrationalrootindex-sturmname-k">
-<h3><a class="toc-backref" href="#id172"><span class="docutils literal"><span class="pre">\PolSturmRationalRootIndex{&lt;sturmname&gt;}{&lt;k&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the index of the <span class="docutils literal">k</span>th rational root as part of the
-ordered real roots (counted without multiplicities). So
-<a class="reference internal" href="#polsturmrationalroot-sturmname-k">\PolSturmRationalRoot{&lt;sturmname&gt;}{&lt;k&gt;}</a> is equivalent to
-this nested call:</p>
-<pre class="literal-block">\PolSturmIsolatedZeroLeft{&lt;sturmname&gt;}{\PolSturmRationalRootIndex{&lt;sturmname&gt;}{&lt;k&gt;}}</pre>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a> must have been executed
-beforehand.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polsturmrationalrootmultiplicity-sturmname-k">
-<h3><a class="toc-backref" href="#id173"><span class="docutils literal"><span class="pre">\PolSturmRationalRootMultiplicity{&lt;sturmname&gt;}{&lt;k&gt;}</span></span></a></h3>
-<blockquote>
-<p>Expands to the multiplicity of the <span class="docutils literal">k</span>th rational root.</p>
-<div class="admonition attention">
-<p class="admonition-title">Attention!</p>
-<p><a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a> must have been executed
-beforehand.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polintervalwidth-sturmname-index">
-<span id="polintervalwidth"></span><h3><a class="toc-backref" href="#id174"><span class="docutils literal"><span class="pre">\PolIntervalWidth{&lt;sturmname&gt;}{&lt;index&gt;}</span></span></a></h3>
-<blockquote>
-<p>The <span class="docutils literal">10^E</span> width of the current <span class="docutils literal">index</span>-th root localization
-interval. Output is in <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> raw <span class="docutils literal">1/1[E]</span> format (if not zero).</p>
-</blockquote>
-</div>
-<div class="section" id="expandable-macros-for-use-within-execution-of-polprintintervals">
-<h3><a class="toc-backref" href="#id175">Expandable macros for use within execution of <span class="docutils literal">\PolPrintIntervals</span></a></h3>
-<p>These macros are for usage within custom user redefinitions of
-<a class="reference internal" href="#polprintintervalsknownroot">\PolPrintIntervalsKnownRoot</a>, <a class="reference internal" href="#polprintintervalsunknownroot">\PolPrintIntervalsUnknownRoot</a>, or
-in redefinitions of <a class="reference internal" href="#polprintintervalsprintexactzero">PolPrintIntervalsPrintExactZero</a> (used in the
-default for the former) and of <a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a>,
-<a class="reference internal" href="#polprintintervalsprintrightendpoint">\PolPrintIntervalsPrintRightEndPoint</a> (used in the default for the
-latter).</p>
-</div>
-<div class="section" id="polprintintervalsthevar">
-<h3><a class="toc-backref" href="#id176"><span class="docutils literal">\PolPrintIntervalsTheVar</span></a></h3>
-<blockquote>
-<p>Expands to the name (default <span class="docutils literal">Z</span>) used for representing the roots,
-which was passed as optional argument <span class="docutils literal">varname</span> to
-<a class="reference internal" href="#polprintintervals-varname-sturmname">\PolPrintIntervals[&lt;varname&gt;]{&lt;sturmname&gt;}</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalstheindex">
-<h3><a class="toc-backref" href="#id177"><span class="docutils literal">\PolPrintIntervalsTheIndex</span></a></h3>
-<blockquote>
-<p>Expands to the index of the considered interval (indexing starting
-at 1 for the leftmost interval).</p>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalsthesturmname">
-<h3><a class="toc-backref" href="#id178"><span class="docutils literal">\PolPrintIntervalsTheSturmName</span></a></h3>
-<blockquote>
-<p>Expands to the argument which was passed as <span class="docutils literal">&lt;sturmname&gt;</span> to
-<a class="reference internal" href="#polprintintervals-varname-sturmname">\PolPrintIntervals[&lt;varname&gt;]{&lt;sturmname&gt;}</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalstheleftendpoint">
-<h3><a class="toc-backref" href="#id179"><span class="docutils literal">\PolPrintIntervalsTheLeftEndPoint</span></a></h3>
-<blockquote>
-<p>The left end point of the interval, as would be produced by
-<a class="reference internal" href="#polsturmisolatedzeroleft">\PolSturmIsolatedZeroLeft</a> if it was
-used with arguments the Sturm chain name and interval index returned
-by <a class="reference internal" href="#polprintintervalsthesturmname">\PolPrintIntervalsTheSturmName</a> and
-<a class="reference internal" href="#polprintintervalstheindex">\PolPrintIntervalsTheIndex</a>.</p>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalstherightendpoint">
-<h3><a class="toc-backref" href="#id180"><span class="docutils literal">\PolPrintIntervalsTheRightEndPoint</span></a></h3>
-<blockquote>
-<p>The right end point of the interval, as would be produced by
-<a class="reference internal" href="#polsturmisolatedzeroright">\PolSturmIsolatedZeroRight</a> for
-this Sturm chain name and index.</p>
-</blockquote>
-</div>
-<div class="section" id="polprintintervalsthemultiplicity">
-<h3><a class="toc-backref" href="#id181"><span class="docutils literal">\PolPrintIntervalsTheMultiplicity</span></a></h3>
-<blockquote>
-<p>The multiplicity of the unique root within the interval of index
-<a class="reference internal" href="#polprintintervalstheindex">\PolPrintIntervalsTheIndex</a>. Makes sense only if the starred (or
-double-starred) variant of <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a> was used earlier.</p>
-</blockquote>
-</div>
-</div>
-</div>
-<div class="section" id="booleans-with-default-setting-as-indicated">
-<h1><a class="toc-backref" href="#id182">Booleans (with default setting as indicated)</a></h1>
-<div class="section" id="xintverbosefalse">
-<h2><a class="toc-backref" href="#id183"><span class="docutils literal">\xintverbosefalse</span></a></h2>
-<blockquote>
-<p>This is actually an <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> configuration. Setting it to
-<span class="docutils literal">true</span> triggers the writing of information to the log when new
-polynomial or scalar variables are defined.</p>
-<div class="admonition caution">
-<p class="admonition-title">Caution!</p>
-<p>The macro and variable meanings as written to the log are to be
-considered unstable and undocumented internal structures.</p>
-</div>
-</blockquote>
-</div>
-<div class="section" id="polnewpolverbosefalse">
-<h2><a class="toc-backref" href="#id184"><span class="docutils literal">\polnewpolverbosefalse</span></a></h2>
-<blockquote>
-<p>When <span class="docutils literal">\poldef</span> is used, both a variable and a function are
-defined. The default <span class="docutils literal">\polnewpolverbosefalse</span> setting suppresses
-the print-out to the log and terminal of the function macro meaning,
-as it only duplicates the information contained in the variable
-which is already printed out to the log and terminal.</p>
-<p>However <a class="reference internal" href="#polgenfloatvariant-polname">\PolGenFloatVariant{&lt;polname&gt;}</a> does still print out the
-information relative to the polynomial function it defines for use in
-<span class="docutils literal">\xintfloateval{}</span> as there is no float polynomial variable, only the
-function, and it is the only way to see its rounded coefficients
-(<span class="docutils literal">\xintverbosefalse</span> suppresses also that info).</p>
-<p>If set to <span class="docutils literal">true</span>, it overrides in both cases
-<span class="docutils literal">\xintverbosefalse</span>. The setting only affects polynomial
-declarations. Scalar variables such as those holding information on
-roots obey only the <span class="docutils literal"><span class="pre">\xintverbose...</span></span> setting.</p>
-<p>(new with <span class="docutils literal">0.8</span>)</p>
-</blockquote>
-</div>
-<div class="section" id="poltypesetallfalse">
-<h2><a class="toc-backref" href="#id185"><span class="docutils literal">\poltypesetallfalse</span></a></h2>
-<blockquote>
-<p>If <span class="docutils literal">true</span>, <a class="reference internal" href="#poltypeset">\PolTypeset</a> will also typeset the vanishing
-coefficients.</p>
-</blockquote>
-</div>
-<div class="section" id="poltoexprallfalse">
-<h2><a class="toc-backref" href="#id186"><span class="docutils literal">\poltoexprallfalse</span></a></h2>
-<blockquote>
-<p>If <span class="docutils literal">true</span>, <a class="reference internal" href="#poltoexpr-pol-expr">\PolToExpr{&lt;pol. expr.&gt;}</a> and <a class="reference internal" href="#poltofloatexpr-pol-expr">\PolToFloatExpr{&lt;pol. expr.&gt;}</a> will
-also include the vanishing coefficients in their outputs.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="utilies">
-<h1><a class="toc-backref" href="#id187">Utilies</a></h1>
-<div class="section" id="poldectostring-decimal-number">
-<span id="poldectostring"></span><h2><a class="toc-backref" href="#id188"><span class="docutils literal">\PolDecToString{decimal number}</span></a></h2>
-<blockquote>
-<p>This is a utility macro to print decimal numbers. It is an alias
-for <span class="docutils literal">\xintDecToString</span>.</p>
-</blockquote>
-<blockquote>
-<p>For example
-<span class="docutils literal"><span class="pre">\PolDecToString{123.456e-8}</span></span> will expand to <span class="docutils literal">0.00000123456</span>
-and <span class="docutils literal"><span class="pre">\PolDecToString{123.450e-8}</span></span> to <span class="docutils literal">0.00000123450</span> which
-illustrates that trailing zeros are not trimmed.</p>
-<p>To trim trailing zeroes, one can use
-<span class="docutils literal"><span class="pre">\PolDecToString{\xintREZ{#1}}</span></span>.</p>
-<p>Attention that a.t.t.o.w. if the argument is for example <span class="docutils literal">1/5</span>, the
-macro does not identify that this is in fact a number with a finite
-decimal expansion and it outputs <span class="docutils literal">1/5</span>. See current <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>
-documentation.</p>
-</blockquote>
-</div>
-<div class="section" id="polexprsetup">
-<h2><a class="toc-backref" href="#id189"><span class="docutils literal">\polexprsetup</span></a></h2>
-<blockquote>
-<p>Serves to customize the package. Currently only two keys are
-recognized:</p>
-<ul class="simple">
-<li><p><span class="docutils literal">norr</span>: the postfix that <a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a>
-should append to <span class="docutils literal">&lt;sturmname&gt;</span> to declare the primitive polynomial
-obtained from original one after removal of all rational roots.
-The default value is <span class="docutils literal">_norr</span> (standing for “no rational roots”).</p></li>
-<li><p><span class="docutils literal">sqfnorr</span>: the postfix that <a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a>
-should append to <span class="docutils literal">&lt;sturmname&gt;</span> to declare the primitive polynomial
-obtained from original one after removal of all rational roots and
-suppression of all multiplicities.
-The default value is <span class="docutils literal">_sqf_norr</span> (standing for “square-free with
-no rational roots”).</p></li>
-</ul>
-<p>The package executes <span class="docutils literal">\polexprsetup{norr=_norr, sqfnorr=_sqf_norr}</span> as default.</p>
-</blockquote>
-</div>
-</div>
-<div class="section" id="technicalities">
-<h1><a class="toc-backref" href="#id190">Technicalities</a></h1>
-<ul>
-<li><p>The catcode of the semi-colon is reset temporarily by <a class="reference internal" href="#poldef">\poldef</a> macro in case some other package (for example the French
-babel module) may have made it active. This will fail though if the
-whole thing was already part of a macro argument, in such cases one
-can use <a class="reference internal" href="#id8">\PolDef</a> rather. The colon in <span class="docutils literal">:=</span> may be
-active with no consequences.</p></li>
-<li><p>As a consequence of <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a> addition and subtraction always using
-least common multiples for the denominators, user-chosen common
-denominators survive additions and multiplications. For example, this:</p>
-<pre class="literal-block">\poldef P(x):= 1/2 + 2/2*x + 3/2*x^3 + 4/2*x^4;
-\poldef Q(x):= 1/3 + (2/3)x + (3/3)x^3 + (4/3)x^4;
-\poldef PQ(x):= P*Q;</pre>
-<p>gives internally the polynomial:</p>
-<pre class="literal-block">1/6+4/6*x^1+4/6*x^2+6/6*x^3+20/6*x^4+16/6*x^5+9/6*x^6+24/6*x^7+16/6*x^8</pre>
-<p>where all coefficients have the same denominator 6. Notice though that
-<span class="docutils literal">\PolToExpr{PQ}</span> outputs the <span class="docutils literal">6/6*x^3</span> as <span class="docutils literal">x^3</span> because (by
-default) it recognizes and filters out coefficients equal to one or
-minus one. One can use for example
-<span class="docutils literal">\PolToCSV{PQ}</span> to see the internally stored coefficients.</p>
-</li>
-<li><p><a class="reference internal" href="#poldiff-polname-1-polname-2">\PolDiff{&lt;polname_1&gt;}{&lt;polname_2&gt;}</a> always applies <span class="docutils literal">\xintPIrr</span> to the
-resulting coefficients, which means that fractions are reduced to
-lowest terms but ignoring an already separated <em>power of ten</em> part <span class="docutils literal">[N]</span>
-present in the internal representation. This is tentative and may change.</p>
-<p>Same remark for <a class="reference internal" href="#polantidiff-polname-1-polname-2">\PolAntiDiff{&lt;polname_1&gt;}{&lt;polname_2&gt;}</a>.</p>
-</li>
-<li><p>Currently, the package stores all coefficients from index <span class="docutils literal">0</span> to
-index equal to the polynomial degree inside a single macro, as a list.
-This data structure is obviously very inefficient for polynomials of
-high degree and few coefficients (as an example with <span class="docutils literal">\poldef <span class="pre">f(x):=x^1000</span> + x^500;</span> the subsequent definition <span class="docutils literal">\poldef <span class="pre">g(x):=</span> <span class="pre">f(x)^2;</span></span> will do of the order of 1,000,000 multiplications and
-additions involvings only zeroes... which does take time). This
-may change in the future.</p></li>
-<li><p>As is to be expected internal structures of the package are barely
-documented and unstable. Don't use them.</p></li>
-</ul>
-</div>
-<div class="section" id="change-log">
-<h1><a class="toc-backref" href="#id191">CHANGE LOG</a></h1>
-<ul>
-<li><p>v0.1 (2018/01/11): initial release. Features:</p>
-<ul class="simple">
-<li><p>The <a class="reference internal" href="#poldef">\poldef</a> parser itself,</p></li>
-<li><p>Differentiation and anti-differentiation,</p></li>
-<li><p>Euclidean division and GCDs,</p></li>
-<li><p>Various utilities such as <a class="reference internal" href="#polfromcsv">\PolFromCSV</a>,
-<a class="reference internal" href="#polmapcoeffs">\PolMapCoeffs</a>,
-<a class="reference internal" href="#poltocsv">\PolToCSV</a>, <a class="reference internal" href="#poltoexpr">\PolToExpr</a>, ...</p></li>
-</ul>
-<p>Only one-variable polynomials so far.</p>
-</li>
-<li><p>v0.2 (2018/01/14)</p>
-<ul class="simple">
-<li><p>Fix: <span class="docutils literal">&quot;README thinks \numexpr recognizes ^ operator&quot;</span>.</p></li>
-<li><p>Convert README to reStructuredText markup.</p></li>
-<li><p>Move main documentation from README to separate <span class="docutils literal">polexpr.txt</span> file.</p></li>
-<li><p>Provide <span class="docutils literal">polexpr.html</span> as obtained via <a class="reference external" href="http://docutils.sourceforge.net/docs/index.html">DocUtils</a> <span class="docutils literal">rst2html.py</span>.</p></li>
-<li><p>Convert README to (CTAN compatible) Markdown markup.</p></li>
-</ul>
-<p>Due to lack of available time the test suite might not be extensive
-enough. Bug reports are very welcome!</p>
-</li>
-<li><p>v0.3 (2018/01/17)</p>
-<ul>
-<li><p>bug fixes:</p>
-<ul>
-<li><p>the <span class="docutils literal">0.1</span> <a class="reference internal" href="#polevalat">\PolEval</a> accepted expressions for its second
-argument, but this was removed by mistake at <span class="docutils literal">0.2</span>. Restored.</p>
-<p><strong>Attention</strong>: at <span class="docutils literal">0.4</span> this has been reverted again, and
-<a class="reference internal" href="#polevalatexpr">\PolEval{P}\AtExpr{foo}</a> syntax is needed for
-using expressions in the second argument.</p>
-</li>
-</ul>
-</li>
-<li><p>incompatible or breaking changes:</p>
-<ul class="simple">
-<li><p><a class="reference internal" href="#poltoexpr">\PolToExpr</a> now by default uses <em>descending</em>
-powers (it also treats differently coefficients equal to 1 or -1.)
-Use <a class="reference internal" href="#id29">\PolToExpr*</a> for <em>ascending</em> powers.</p></li>
-<li><p><a class="reference internal" href="#polevalat">\PolEval</a> reduced the output to smallest terms,
-but as this is costly with big fractions and not needed if e.g.
-wrapped in an <span class="docutils literal">\xintRound</span> or <span class="docutils literal">\xintFloat</span>, this step has been
-removed; the former meaning is available as <a class="reference internal" href="#polevalreducedat">\PolEvalReduced</a>.</p></li>
-</ul>
-</li>
-<li><p>new (or newly documented) macros:</p>
-<ul class="simple">
-<li><p><a class="reference internal" href="#poltypesetcmd">\PolTypesetCmd</a></p></li>
-<li><p><a class="reference internal" href="#poltypesetcmdprefix">\PolTypesetCmdPrefix</a></p></li>
-<li><p><a class="reference internal" href="#poltypesetmonomialcmd">\PolTypesetMonomialCmd</a></p></li>
-<li><p><a class="reference internal" href="#polevalreducedat">\PolEvalReducedAt</a></p></li>
-<li><p><a class="reference internal" href="#poltofloatexpr">\PolToFloatExpr</a></p></li>
-<li><p><a class="reference internal" href="#poltoexproneterm">\PolToExprOneTerm</a></p></li>
-<li><p><a class="reference internal" href="#poltofloatexproneterm">\PolToFloatExprOneTerm</a></p></li>
-<li><p><a class="reference internal" href="#poltoexprcmd">\PolToExprCmd</a></p></li>
-<li><p><a class="reference internal" href="#poltofloatexprcmd">\PolToFloatExprCmd</a></p></li>
-<li><p><a class="reference internal" href="#poltoexprtermprefix">\PolToExprTermPrefix</a></p></li>
-<li><p><a class="reference internal" href="#poltoexprvar">\PolToExprVar</a></p></li>
-<li><p><a class="reference internal" href="#poltoexprtimes">\PolToExprTimes</a></p></li>
-</ul>
-</li>
-<li><p>improvements:</p>
-<ul>
-<li><p>documentation has a table of contents, internal hyperlinks,
-standardized signature notations and added explanations.</p></li>
-<li><p>one can do <span class="docutils literal"><span class="pre">\PolLet{g}={f}</span></span> or <span class="docutils literal"><span class="pre">\PolLet{g}{f}</span></span>.</p></li>
-<li><p><span class="docutils literal">\PolToExpr{f}</span> is highly customizable.</p></li>
-<li><p><a class="reference internal" href="#poldef">\poldef</a> and other defining macros prepare the polynomial
-functions for usage within <span class="docutils literal">\xintthefloatexpr</span> (or
-<span class="docutils literal">\xintdeffloatvar</span>). Coefficients are pre-rounded to the
-floating point precision. Indispensible for numerical algorithms,
-as exact fractions, even reduced, quickly become very big. See the
-documentation about how to use the exact polynomials also in
-floating point context.</p>
-<p><strong>Attention</strong>: this has been reverted at <span class="docutils literal">0.4</span>. The macro
-<a class="reference internal" href="#polgenfloatvariant">\PolGenFloatVariant</a> must be used for
-generation floating point polynomial functions.</p>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p>v0.3.1 (2018/01/18)</p>
-<p>Fixes two typos in example code included in the documentation.</p>
-</li>
-<li><p>v0.4 (2018/02/16)</p>
-<ul>
-<li><p>bug fixes:</p>
-<ul class="simple">
-<li><p>when Euclidean division gave a zero remainder, the internal
-representation of this zero polynomial could be faulty; this
-could cause mysterious bugs in conjunction with other package
-macros such as <a class="reference internal" href="#polmapcoeffs">\PolMapCoeffs</a>.</p></li>
-<li><p><a class="reference internal" href="#polgcd">\PolGCD</a> was buggy in case of first polynomial being
-of lesser degree than the second one.</p></li>
-</ul>
-</li>
-<li><p>breaking changes:</p>
-<ul>
-<li><p>formerly <a class="reference internal" href="#polevalat">\PolEval{P}\At{foo}</a> allowed <span class="docutils literal">foo</span> to
-be an expression, which was transparently handled via
-<span class="docutils literal">\xinttheexpr</span>. Now, <span class="docutils literal">foo</span> must be a fraction (or a macro
-expanding to such) in the format acceptable by <span class="docutils literal">xintfrac.sty</span>
-macros. Use <a class="reference internal" href="#polevalatexpr">\PolEval{P}\AtExpr{foo}</a> for more
-general arguments using expression syntax. E.g., if <span class="docutils literal">foo</span> is the
-name of a variable known to <span class="docutils literal">\xintexpr</span>.</p>
-<p>The same holds for <a class="reference internal" href="#polevalreducedat">\PolEvalReduced</a>
-and <a class="reference internal" href="#polfloatevalat">\PolFloatEval</a>.</p>
-</li>
-<li><p>the <span class="docutils literal">3.0</span> automatic generation of floating point variants has
-been reverted. Not only do <em>not</em> the package macros automatically
-generate floating point variants of newly created polynomials,
-they actually make pre-existing such variant undefined.</p>
-<p>See <a class="reference internal" href="#polgenfloatvariant">\PolGenFloatVariant</a>.</p>
-</li>
-</ul>
-</li>
-<li><p>new non-expandable macros:</p>
-<ul class="simple">
-<li><p><a class="reference internal" href="#polgenfloatvariant">\PolGenFloatVariant</a></p></li>
-<li><p><a class="reference internal" href="#polgloballet">\PolGlobalLet</a></p></li>
-<li><p><a class="reference internal" href="#poltypesetone">\PolTypesetOne</a></p></li>
-<li><p><a class="reference internal" href="#polquo">\PolQuo</a></p></li>
-<li><p><a class="reference internal" href="#polrem">\PolRem</a></p></li>
-<li><p><a class="reference internal" href="#poltosturm">\PolToSturm</a></p></li>
-<li><p><a class="reference internal" href="#id12">\PolToSturm*</a></p></li>
-<li><p><a class="reference internal" href="#polsettosturmchainsignchangesat">\PolSetToSturmChainSignChangesAt</a></p></li>
-<li><p><a class="reference internal" href="#polsettonbofzeroswithin">\PolSetToNbOfZerosWithin</a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a></p></li>
-<li><p><a class="reference internal" href="#polrefineinterval">\PolRefineInterval*</a></p></li>
-<li><p><a class="reference internal" href="#polrefineinterval-n">\PolRefineInterval[N]</a></p></li>
-<li><p><a class="reference internal" href="#polensureintervallength">\PolEnsureIntervalLength</a></p></li>
-<li><p><a class="reference internal" href="#polensureintervallengths">\PolEnsureIntervalLengths</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervals">\PolPrintIntervals</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsprintexactzero">\PolPrintIntervalsPrintExactZero</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsprintleftendpoint">\PolPrintIntervalsPrintLeftEndPoint</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsprintrightendpoint">\PolPrintIntervalsPrintRightEndPoint</a></p></li>
-<li><p><a class="reference internal" href="#id23">\PolReduceCoeffs*</a></p></li>
-<li><p><a class="reference internal" href="#polmakemonic">\PolMakeMonic</a></p></li>
-</ul>
-</li>
-<li><p>new expandable macros:</p>
-<ul class="simple">
-<li><p><a class="reference internal" href="#poltoexpronetermstylea">\PolToExprOneTermStyleA</a></p></li>
-<li><p><a class="reference internal" href="#polifcoeffisplusorminusone">\PolIfCoeffIsPlusOrMinusOne</a></p></li>
-<li><p><a class="reference internal" href="#polleadingcoeff">\PolLeadingCoeff</a></p></li>
-<li><p><a class="reference internal" href="#polsturmchainlength">\PolSturmChainLength</a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofisolatedzeros">\PolSturmNbOfIsolatedZeros</a></p></li>
-<li><p><a class="reference internal" href="#polsturmifzeroexactlyknown">\PolSturmIfZeroExactlyKnown</a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatedzeroleft">\PolSturmIsolatedZeroLeft</a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatedzeroright">\PolSturmIsolatedZeroRight</a></p></li>
-<li><p><span class="docutils literal">\PolPrintIntervalsTheEndPoint</span> (removed at 0.7)</p></li>
-<li><p><a class="reference internal" href="#polprintintervalstheindex">\PolPrintIntervalsTheIndex</a></p></li>
-<li><p><span class="docutils literal">\PolIfEndPointIsPositive</span> (removed at 0.7)</p></li>
-<li><p><span class="docutils literal">\PolIfEndPointIsNegative</span> (removed at 0.7)</p></li>
-<li><p><span class="docutils literal">\PolIfEndPointIsZero</span> (removed at 0.7)</p></li>
-<li><p><a class="reference internal" href="#polintervalwidth">\PolIntervalWidth</a></p></li>
-<li><p><a class="reference internal" href="#poldectostring">\PolDecToString</a></p></li>
-</ul>
-</li>
-<li><p>improvements:</p>
-<p>The main new feature is implementation of the <a class="reference external" href="https://en.wikipedia.org/wiki/Sturm%27s_theorem">Sturm algorithm</a>
-for localization of the real roots of polynomials.</p>
-</li>
-</ul>
-</li>
-<li><p>v0.4.1 (2018/03/01)</p>
-<p>Synced with xint 1.3.</p>
-</li>
-<li><p>v0.4.2 (2018/03/03)</p>
-<p>Documentation fix.</p>
-</li>
-<li><p>v0.5 (2018/04/08)</p>
-<ul class="simple">
-<li><p>bug fixes:</p>
-<ul>
-<li><p><a class="reference internal" href="#polget-polname-fromarray-macro">\PolGet{&lt;polname&gt;}\fromarray\macro</a> crashed when <span class="docutils literal">\macro</span> was
-an <a class="reference external" href="https://www.ctan.org/pkg/xint">xinttools</a> array macro with no items. It now produces the zero
-polynomial.</p></li>
-</ul>
-</li>
-<li><p>breaking changes:</p>
-<ul>
-<li><p><a class="reference internal" href="#poltosturm">\PolToSturm</a> creates primitive integer coefficients polynomials.
-This speeds up localization of roots via
-<a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a>. In case of user protests the author
-will make available again the code producing the bona fide Sturm
-polynomials as used formerly.</p></li>
-<li><p>polynomials created from <a class="reference internal" href="#polfromcsv">\PolFromCSV</a> or <a class="reference internal" href="#polget">\PolGet</a>
-get their coefficients normalized via <a class="reference external" href="https://www.ctan.org/pkg/xint">xintfrac</a>'s <span class="docutils literal">\xintRaw</span>.</p></li>
-</ul>
-</li>
-<li><p>experimental change:</p>
-<ul>
-<li><p>optional argument to <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a> (see <span class="docutils literal">The degree 41 polynomial with <span class="pre">-2,</span> <span class="pre">-1.9,</span> <span class="pre">-1.8,</span> <span class="pre">...,</span> 0, 0.1, <span class="pre">...,</span> 1.9, 2 as roots</span> in <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span>).
-It will presumably be replaced in future by
-an interval specification.</p></li>
-</ul>
-</li>
-<li><p>new non-expandable macro:</p>
-<ul>
-<li><p><a class="reference internal" href="#polmakeprimitive">\PolMakePrimitive</a></p></li>
-</ul>
-</li>
-<li><p>new expandable macro:</p>
-<ul>
-<li><p><a class="reference internal" href="#policontent">\PolIContent</a></p></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p>v0.5.1 (2018/04/22)</p>
-<ul class="simple">
-<li><p>new feature:</p>
-<ul>
-<li><p>the character <span class="docutils literal">'</span> can be used in polynomial names.</p></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p>v0.6 (2018/11/20)</p>
-<ul class="simple">
-<li><p>bugfix:</p>
-<ul>
-<li><p>the starred variant <a class="reference internal" href="#id13">\PolToSturm*{&lt;polname&gt;}{&lt;sturmname&gt;}</a> was
-broken. On the occasion of the fix, its meaning has been modified,
-see its documentation.</p></li>
-<li><p>using <a class="reference internal" href="#poltosturm">\PolToSturm</a> with a constant polynomial
-caused a division by zero error.</p></li>
-</ul>
-</li>
-<li><p>new macro:</p>
-<ul>
-<li><p><a class="reference internal" href="#id14">\PolSturmIsolateZeros*</a>
-acts like the <a class="reference internal" href="#polsturmisolatezeros">non-starred variant</a> then computes all the multiplicities.</p></li>
-</ul>
-</li>
-<li><p>new expandable macros:</p>
-<ul>
-<li><p><a class="reference internal" href="#polsturmisolatedzeromultiplicity-sturmname-index">\PolSturmIsolatedZeroMultiplicity{&lt;sturmname&gt;}{&lt;index&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequalto-value">\PolSturmNbOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualTo{&lt;value&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrootsof-sturmname-lessthanorequaltoexpr-num-expr">\PolSturmNbOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualToExpr{&lt;num. expr.&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequalto-value">\PolSturmNbWithMultOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualTo{&lt;value&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbwithmultofrootsof-sturmname-lessthanorequaltoexpr-num-expr">\PolSturmNbWithMultOfRootsOf{&lt;sturmname&gt;}\LessThanOrEqualToExpr{&lt;num. expr.&gt;}</a></p></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p>v0.7 (2018/12/08), v0.7.1 (bugfix), v0.7.2 (2nd bugfix) (2018/12/09)</p>
-<ul class="simple">
-<li><p>breaking changes:</p>
-<ul>
-<li><p>although <a class="reference internal" href="#polprintintervals-varname-sturmname">\PolPrintIntervals[&lt;varname&gt;]{&lt;sturmname&gt;}</a> default output
-remains the same, some auxiliary macros for user-customization
-have been removed: <span class="docutils literal">\PolPrintIntervalsTheEndPoint</span>,
-<span class="docutils literal"><span class="pre">\PolIfEndPointIsPositive{T}{F}</span></span>,
-<span class="docutils literal"><span class="pre">\PolIfEndPointIsNegative{T}{F}</span></span>, and
-<span class="docutils literal"><span class="pre">\PolIfEndPointIsZero{T}{F}</span></span>.</p></li>
-</ul>
-</li>
-<li><p>bugfix:</p>
-<ul>
-<li><p>it could happen that, contrarily to documentation, an interval
-computed by <a class="reference internal" href="#polsturmisolatezeros-sturmname">\PolSturmIsolateZeros{&lt;sturmname&gt;}</a> had zero as an
-endpoint,</p></li>
-<li><p><a class="reference internal" href="#polensureintervallength-sturmname-index-exponent">\PolEnsureIntervalLength{&lt;sturmname&gt;}{&lt;index&gt;}{&lt;exponent&gt;}</a> could under
-certain circumstances erroneously replace a non-zero root by
-zero,</p></li>
-<li><p><a class="reference internal" href="#polensureintervallengths-sturmname-exponent">\PolEnsureIntervalLengths{&lt;sturmname&gt;}{&lt;exponent&gt;}</a> crashed when used with
-a polynomial with no real roots, hence for which no isolation intervals
-existed (thanks to Thomas Söll for report).</p></li>
-</ul>
-</li>
-<li><p>new macros:</p>
-<ul>
-<li><p><a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatezerosgetmultiplicitiesandrationalroots-sturmname">\PolSturmIsolateZerosGetMultiplicitiesAndRationalRoots{&lt;sturmname&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmisolatezerosandfindrationalroots-sturmname">\PolSturmIsolateZerosAndFindRationalRoots{&lt;sturmname&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polexprsetup">\polexprsetup</a></p></li>
-<li><p><a class="reference internal" href="#id21">\PolPrintIntervals*</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsnorealroots">\PolPrintIntervalsNoRealRoots</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsbeginenv">\PolPrintIntervalsBeginEnv</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsendenv">\PolPrintIntervalsEndEnv</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsknownroot">\PolPrintIntervalsKnownRoot</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsunknownroot">\PolPrintIntervalsUnknownRoot</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsprintmultiplicity">\PolPrintIntervalsPrintMultiplicity</a></p></li>
-</ul>
-</li>
-<li><p>new expandable macros:</p>
-<ul>
-<li><p><a class="reference internal" href="#polsturmnbofrationalroots-sturmname">\PolSturmNbOfRationalRoots{&lt;sturmname&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmnbofrationalrootswithmultiplicities-sturmname">\PolSturmNbOfRationalRootsWithMultiplicities{&lt;sturmname&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmrationalroot-sturmname-k">\PolSturmRationalRoot{&lt;sturmname&gt;}{&lt;k&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmrationalrootindex-sturmname-k">\PolSturmRationalRootIndex{&lt;sturmname&gt;}{&lt;k&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polsturmrationalrootmultiplicity-sturmname-k">\PolSturmRationalRootMultiplicity{&lt;sturmname&gt;}{&lt;k&gt;}</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthevar">\PolPrintIntervalsTheVar</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthesturmname">\PolPrintIntervalsTheSturmName</a></p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthemultiplicity">\PolPrintIntervalsTheMultiplicity</a></p></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p>v0.7.3 (2019/02/04)</p>
-<ul class="simple">
-<li><p>bugfix:</p>
-<ul>
-<li><p>Debugging information not destined to user showed in log if root
-finding was done under <span class="docutils literal">\xintverbosetrue</span> regime.</p></li>
-<li><p><a class="reference internal" href="#polprintintervalsthevar">\PolPrintIntervalsTheVar</a> remained defined after
-<a class="reference internal" href="#polprintintervals">\PolPrintIntervals</a> but was left undefined after
-<a class="reference internal" href="#id21">\PolPrintIntervals*</a> (reported by Jürgen Gilg). Now remains
-defined in both cases, and <a class="reference internal" href="#polprintintervalsthesturmname">\PolPrintIntervalsTheSturmName</a>
-also.</p></li>
-<li><p>Polynomial names ending in digits caused errors (reported by Thomas
-Söll).</p></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p>v0.7.4 (2019/02/12)</p>
-<ul class="simple">
-<li><p>bugfix:</p>
-<ul>
-<li><p>20000000000 is too big for <span class="docutils literal">\numexpr</span>, shouldn't I know that?
-Thanks to Jürgen Gilg for report.</p></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p>v0.7.5 (2020/01/31)</p>
-<p>Synced with xintexpr 1.4. Requires it.</p>
-</li>
-<li><p>v0.8 (2021/03/29)</p>
-<p>Synced with xintexpr 1.4d. Requires it.</p>
-<ul class="simple">
-<li><p>breaking changes:</p>
-<ul>
-<li><p>As the usability of character <span class="docutils literal">'</span> in names has been extended
-from <span class="docutils literal">\poldef</span> to also generally <span class="docutils literal">\xintexpr</span>, <span class="docutils literal">\xintdefvar</span>,
-and <span class="docutils literal">\xintdeffunc</span>, it means that the infix operators
-<span class="docutils literal">'and'</span>, <span class="docutils literal">'or'</span>, and <span class="docutils literal">'mod'</span> must be replaced
-by <span class="docutils literal">&amp;&amp;</span>, <span class="docutils literal">||</span>, and <span class="docutils literal">/:</span> if they
-follow immediately a variable name (similarly <span class="docutils literal">'xor'</span> must
-be replaced by the <span class="docutils literal">xor()</span> function in such case).</p></li>
-<li><p><a class="reference internal" href="#poltoexpr">\PolToExpr</a> by default uses a catcode 12
-<span class="docutils literal">^</span>. See its documentation and the new configuration
-<a class="reference internal" href="#poltoexprcaret">\PolToExprCaret</a>.</p></li>
-</ul>
-</li>
-<li><p>deprecated:</p>
-<ul>
-<li><p>Usage of <span class="docutils literal">P/Q</span> for the euclidean quotient of two polynomials is
-deprecated. Start using <span class="docutils literal">quo(P,Q)</span> in its place.</p></li>
-</ul>
-</li>
-<li><p>bugfix:</p>
-<ul>
-<li><p>The <span class="docutils literal">\xintglobaldefstrue</span> setting was obeyed only partially
-by the polexpr macros defining polynomials.</p></li>
-<li><p>The <span class="docutils literal">\xintexpr</span> variables storing the values of the extremities
-of the intervals as found by <a class="reference internal" href="#polsturmisolatezeros">\PolSturmIsolateZeros</a> were not updated at 0.7.5 to the
-xintexpr 1.4 format and thus caused low-level TeX errors if used.</p></li>
-<li><p>Attempting to use in <span class="docutils literal">\poldef</span> a function previously declared
-via <span class="docutils literal">\xintdeffunc</span> which made usage of the indexing or slicing
-&quot;ople&quot; syntax typically caused <span class="docutils literal">TeX capacity exceeded</span> error.
-Indeed 0.7.5 only partially made polexpr able to cope with the
-extended possibilities for xintexpr 1.4 user-declared functions.
-Hopefully <span class="docutils literal">0.8</span> achieves full functionality in this context.</p></li>
-</ul>
-</li>
-<li><p>new macros:</p>
-<ul>
-<li><p><a class="reference internal" href="#polnewpolverbosefalse">\polnewpolverbosefalse</a></p></li>
-<li><p><a class="reference internal" href="#poltoexprcaret">\PolToExprCaret</a></p></li>
-<li><p><a class="reference internal" href="#poltoexprinvar">\PolToExprInVar</a></p></li>
-<li><p>alongside the major new functionalities described in the next item
-<a class="reference internal" href="#poltypeset">\PolTypeset</a> and <a class="reference internal" href="#poltoexpr">\PolToExpr</a> have
-been enhanced to accept as argument a general expression and not
-only a pre-declared polynomial name.</p></li>
-</ul>
-</li>
-<li><p>new features:</p>
-<ul>
-<li><p>The package is usable under Plain and probably most any TeX format,
-and not only under LaTeX.</p></li>
-<li><p>The core of the package has been rewritten entirely in order to
-start letting <span class="docutils literal">\xintexpr</span> recognize a polynomial type as a genuine
-variable. This has allowed:</p>
-<ul>
-<li><p>to solve the reduced inter-operability problems between polexpr
-and <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> which arose as consequences to the deep <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <span class="docutils literal">1.4</span>
-evolution,</p></li>
-<li><p>to make available most of the functionality associated to
-expandable macros directly in the <span class="docutils literal">\xinteval</span> syntax as
-operators or functions,</p></li>
-<li><p>to provide (expandable) functional interface in <span class="docutils literal">\xinteval</span> to
-features previously available only via (for some, non-expandable)
-macro interface such as gcd computations.</p></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-<p>See the updated <a class="reference internal" href="#quick-syntax-overview">Quick syntax overview</a> and then <a class="reference internal" href="#polexpr08">the extended syntax
-description</a>.</p>
-</li>
-<li><p>v0.8.1 (2021/04/12)</p>
-<ul class="simple">
-<li><p>breaking changes:</p>
-<ul>
-<li><p>renamed v0.8's <span class="docutils literal">icontent()</span> to <a class="reference internal" href="#cont">cont()</a>.</p></li>
-<li><p>renamed v0.8's <span class="docutils literal">lcoeff()</span> to <a class="reference internal" href="#lc">lc()</a>.</p></li>
-</ul>
-</li>
-<li><p>bugfix:</p>
-<ul>
-<li><p>Sadly, <span class="docutils literal">diff1()</span>, <span class="docutils literal">diff2()</span>, <span class="docutils literal">diffn()</span> were broken
-for polynomials of degrees 8 or more, due to a typo and
-insufficient testing.</p></li>
-<li><p>The package should have (as documented) required <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> 1.4d
-but in practice it accepted to work with <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> 1.4c, whose
-<span class="docutils literal">\xinteval</span> does not know how to &quot;output&quot; a polynomial.</p></li>
-<li><p>The definition of one of the two variants of <a class="reference internal" href="#polsturmnbofrootsof">\PolSturmNbOfRootsOf</a> was broken by an end-of-line space, left-over
-from mass conversion from LaTeX to TeX syntax.</p></li>
-</ul>
-</li>
-<li><p>added:</p>
-<ul>
-<li><p><a class="reference internal" href="#lpol">lpol()</a></p></li>
-<li><p><a class="reference internal" href="#lcoeffs">lcoeffs()</a></p></li>
-</ul>
-</li>
-</ul>
-</li>
-<li><p>v0.8.2 (2021/05/05)</p>
-<ul class="simple">
-<li><p>breaking change:</p>
-<ul>
-<li><p>usage of <span class="docutils literal">\xintPFloat</span> in place of <span class="docutils literal">\xintFloat</span> for
-<a class="reference internal" href="#poltofloatexprcmd">\PolToFloatExprCmd</a>.</p></li>
-</ul>
-</li>
-<li><p>improved:</p>
-<ul>
-<li><p>Some <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> functions such as <span class="docutils literal">rseq()</span> use the semi-colon,
-and it was mentioned in the documentation that <a class="reference internal" href="#poldef">\poldef</a>
-will be confused by this and that inner semi-colons could be
-set within braces <span class="docutils literal">{;}</span> as a work-around. It was not clear from
-this documentation that also <a class="reference internal" href="#id8">\PolDef</a> required
-this work-around. With this relase only <a class="reference internal" href="#poldef">\poldef</a> but
-not <a class="reference internal" href="#id8">\PolDef</a> needs the work-around.</p></li>
-</ul>
-</li>
-<li><p>track <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <span class="docutils literal">1.4e</span> changes relative to powers.</p></li>
-</ul>
-</li>
-<li><p>v0.8.3 (2021/05/27)</p>
-<ul class="simple">
-<li><p>small internal update to track an <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <span class="docutils literal">1.4h</span> change
-regarding handling of exceptions. Will require this version at
-least on loading.</p></li>
-</ul>
-</li>
-<li><p>v0.8.4 (2021/11/01)</p>
-<ul class="simple">
-<li><p>bugfix: <a class="reference internal" href="#id17">\PolSturmIsolateZeros**{&lt;sturmname&gt;}</a> did not
-declare the <span class="docutils literal">&lt;sturmname&gt;_norr</span> and <span class="docutils literal">&lt;sturmname&gt;_sqf_norr</span>
-polynomials if original polynomial had no real root!</p></li>
-</ul>
-</li>
-<li><p>v0.8.5 (2021/11/30)</p>
-<ul class="simple">
-<li><p>bugfix: support for the <span class="docutils literal">intfrom()</span> function was in the code,
-but the declaration to the polynomial parser had not been done.</p></li>
-<li><p>track (belatedly) upstream deprecation of <span class="docutils literal">\xintSignedFrac</span> and
-<span class="docutils literal">\xintSignedFwOver</span> at <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> <span class="docutils literal">1.4g</span></p></li>
-</ul>
-</li>
-<li><p>v0.8.6 (2022/01/09)</p>
-<ul class="simple">
-<li><p>separate <span class="docutils literal"><span class="pre">polexpr-examples.pdf</span></span> from this reference documentation.</p></li>
-<li><p>minor improvement to the computation of a priori bounds on real roots.</p></li>
-<li><p>add <a class="reference internal" href="#polprintintervalsrowseparator">\PolPrintIntervalsRowSeparator</a> and allow usage of
-<span class="docutils literal">amsmath</span> environments in custom <a class="reference internal" href="#polprintintervalsbeginenv">\PolPrintIntervalsBeginEnv</a>
-and <a class="reference internal" href="#polprintintervalsendenv">\PolPrintIntervalsEndEnv</a>.</p></li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="section" id="acknowledgments">
-<h1><a class="toc-backref" href="#id192">Acknowledgments</a></h1>
-<p>Thanks to Jürgen Gilg whose question about <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> usage for
-differentiating polynomials was the initial trigger leading to this
-package, and to Jürgen Gilg and Thomas Söll for testing it on some
-concrete problems.</p>
-<p>Renewed thanks to them on occasion of the <span class="docutils literal">0.6</span>, <span class="docutils literal">0.7</span>, and <span class="docutils literal">0.8</span>
-releases for their continued interest.</p>
-<p>See README.md for the License.</p>
-</div>
-</div>
-</body>
-</html>
+defined by <code class="docutils literal notranslate"><span class="pre">polexpr</span></code> itself.</p>
+</section>
+<section id="license-is-lppl-1-3c">
+<h2>License is LPPL 1.3c</h2>
+<p>This work is distributed under the conditions of the
+LaTeX Project Public License version 1.3c.</p>
+<p>See README.md for details.</p>
+</section>
+<section id="in-memoriam-jurgen-gilg-1967-2022">
+<h2>In memoriam: Jürgen Gilg (1967-2022)</h2>
+<p>My first contact with Jürgen was in January 2018, and his <em>little
+question</em> about usage of <a class="reference external" href="https://www.ctan.org/pkg/xintexpr">xintexpr</a> for differentiating polynomials
+proved the direct cause for the <a class="reference internal" href="polexpr-changes.html#firstrelease"><span class="std std-ref">creation of polexpr</span></a>. His regular comments and questions (often, jointly
+with Thomas Söll) largely contributed to motivate the author into
+investing time and effort into the somewhat strange occupation of
+developing such unusual TeX/LaTeX packages. The topics of our
+discussions evolved over the years and were not limited to TeX, LaTeX,
+PSTricks or PostScript matters.</p>
+<p>I learned to discover and appreciate his unassuming and kind character.
+He was very conscientious in all his projects with others and was often
+overly generous in his appreciation of people’s contributions. On
+receiving the sad news of his unexpected and untimely death, I initially
+thought I had been knowing him for at least 10 years, but it is actually
+only a bit more than 4 years… I will sorely miss this friendship with
+a gentle soul from <em>over the Rhine</em>.</p>
+<p>I dedicate the work which has gone into <a class="reference external" href="https://www.ctan.org/pkg/polexpr">polexpr</a> to Jürgen’s memory.</p>
+<div class="toctree-wrapper compound">
+</div>
+</section>
+</section>
+
+
+ <div class="clearer"></div>
+ </div>
+ </div>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper"><h3>Contents of this page</h3>
+<ul>
+<li><a class="reference internal" href="#">Introduction to polexpr</a><ul>
+<li><a class="reference internal" href="#usage-via-xintsession">Usage via xintsession</a></li>
+<li><a class="reference internal" href="#license-is-lppl-1-3c">License is LPPL 1.3c</a></li>
+<li><a class="reference internal" href="#in-memoriam-jurgen-gilg-1967-2022">In memoriam: Jürgen Gilg (1967-2022)</a></li>
+</ul>
+</li>
+</ul>
+
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="polexpr.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+ <div>
+ <h4>Next topic</h4>
+ <p class="topless"><a href="polexpr-ref.html"
+ title="next chapter">polexpr reference</a></p>
+ </div>
+<h3><a href="#">Table of Contents</a></h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="polexpr-ref.html">polexpr reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="polexpr-changes.html">CHANGES</a></li>
+</ul>
+
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="polexpr-ref.html" title="polexpr reference"
+ >next</a></li>
+ <li class="nav-item nav-item-0"><a href="#">polexpr 0.8.7 documentation</a> &#187;</li>
+ <li class="nav-item nav-item-this"><a href="">Introduction to polexpr</a></li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2022, Jean-François Burnol.
+ Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 5.0.0+/f58771c09.
+ </div>
+ </body>
+</html> \ No newline at end of file