summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/polexpr
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-02-05 21:56:17 +0000
committerKarl Berry <karl@freefriends.org>2019-02-05 21:56:17 +0000
commit076635117d18350a7f9fa5cf2ca4bd966e513483 (patch)
tree29c269b9f8a3f58e8ab87a8088333c3f47a95fb3 /Master/texmf-dist/tex/latex/polexpr
parent55c5791c6ab8cf082514fe407968cf20b165639a (diff)
polexpr (5feb19)
git-svn-id: svn://tug.org/texlive/trunk@49948 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/polexpr')
-rw-r--r--Master/texmf-dist/tex/latex/polexpr/polexpr.sty121
1 files changed, 59 insertions, 62 deletions
diff --git a/Master/texmf-dist/tex/latex/polexpr/polexpr.sty b/Master/texmf-dist/tex/latex/polexpr/polexpr.sty
index 9bc286115d8..5aca52408c7 100644
--- a/Master/texmf-dist/tex/latex/polexpr/polexpr.sty
+++ b/Master/texmf-dist/tex/latex/polexpr/polexpr.sty
@@ -1,13 +1,14 @@
% author: Jean-François Burnol
% License: LPPL 1.3c (author-maintained)
\ProvidesPackage{polexpr}%
- [2018/12/09 v0.7.2 Polynomial expressions with rational coefficients (JFB)]%
+ [2019/02/04 v0.7.3 Polynomial expressions with rational coefficients (JFB)]%
\RequirePackage{xintexpr}[2018/06/17]% xint 1.3c for \ifxintglobaldefs boolean
\edef\POL@restorecatcodes
{\catcode`\noexpand\_ \the\catcode`\_ %
\catcode`\noexpand\! \the\catcode`\! %
+ \catcode`\noexpand\* \the\catcode`\* %
\catcode0 \the\catcode0\relax}%
-\catcode`\_ 11 \catcode0 12
+\catcode`\_ 11 \catcode0 12 \catcode`\* 12
\long\def\xint_stop_atfirstoftwo #1#2{ #1}% not yet in xint 1.3c
\long\def\xint_stop_atsecondoftwo #1#2{ #2}%
@@ -889,13 +890,13 @@
\ifnum\POL@isolz@NbOfRoots=\z@
% no real roots, define empty arrays nevertheless
\begingroup\globaldefs\@ne
- \expandafter\xintAssignArray\expandafter\to\csname POL_ZeroMult\POL@sturmname\endcsname
- \expandafter\xintAssignArray\expandafter\to\csname POL_RRIndex\POL@sturmname\endcsname
+ \expandafter\xintAssignArray\expandafter\to\csname POL_ZM\POL@sturmname*\endcsname
+ \expandafter\xintAssignArray\expandafter\to\csname POL_RI\POL@sturmname*\endcsname
\endgroup
\else
% all we currently know is that multiplicities are at least one
\begingroup\globaldefs\@ne
- \expandafter\POL@initarray\csname POL_ZeroMult\POL@sturmname\endcsname{1}%
+ \expandafter\POL@initarray\csname POL_ZM\POL@sturmname*\endcsname{1}%
\endgroup
% on ne va pas utiliser de Horner, mais des divisions par X - x, et ces
% choses vont évoluer, ainsi que le coefficient dominant entier
@@ -935,14 +936,14 @@
\POL@newpol{\POL@sturmname\POL@sqfnorr}% without multiplicities
\POL@newpol{\POL@sturmname\POL@norr}% with multiplicities
% declare the array holding the interval indices for the rational roots
- \expandafter\POL@findrat@doRRarray\csname POL_RRIndex\POL@sturmname\endcsname
+ \expandafter\POL@findrat@doRRarray\csname POL_RI\POL@sturmname*\endcsname
\fi
}%
\def\POL@findrat@doRRarray#1{%
% il faudrait un \xintAssignArray* qui fasse même expansion que \xintFor*
\edef\POL@temp{%
\xintiloop[1+1]
- \romannumeral0\csname POL_ZeroIsKnown\POL@sturmname\xintiloopindex\endcsname
+ \romannumeral0\csname POL_ZK\POL@sturmname*\xintiloopindex\endcsname
\xintbracediloopindex % I should have named it \xintiloopbracedindex...
{}%
\ifnum\xintiloopindex<\POL@isolz@NbOfRoots\space
@@ -1197,13 +1198,13 @@
\def\POL@findrat@loop@storeit{%
% update storage, I can not use storeleftandright here (due to rawout etc...)
\expandafter
- \xdef\csname POL_ZeroInt\POL@sturmname L\POL@findrat@index\endcsname
+ \xdef\csname POL_ZL\POL@sturmname*\POL@findrat@index\endcsname
{\PolDecToString{\POL@findrat@x}}%
\global\expandafter
- \let\csname POL_ZeroInt\POL@sturmname R\POL@findrat@index\expandafter\endcsname
- \csname POL_ZeroInt\POL@sturmname L\POL@findrat@index\endcsname
+ \let\csname POL_ZR\POL@sturmname*\POL@findrat@index\expandafter\endcsname
+ \csname POL_ZL\POL@sturmname*\POL@findrat@index\endcsname
\global\expandafter
- \let\csname POL_ZeroIsKnown\POL@sturmname\POL@findrat@index\endcsname
+ \let\csname POL_ZK\POL@sturmname*\POL@findrat@index\endcsname
\xint_stop_atfirstoftwo
\begingroup\xintglobaldefstrue
% skip some overhead of \xintdefvar...
@@ -1236,9 +1237,9 @@
\POL@mapcoeffs\POL@aux@toint{\POL@sturmname\POL@norr}%
\expandafter
\xdef
- \csname POL_ZeroMult\POL@sturmname\POL@findrat@index\endcsname
+ \csname POL_ZM\POL@sturmname*\POL@findrat@index\endcsname
{\the\numexpr
- \csname POL_ZeroMult\POL@sturmname\POL@findrat@index\endcsname+\@ne}%
+ \csname POL_ZM\POL@sturmname*\POL@findrat@index\endcsname+\@ne}%
\expandafter\POL@findrat@loop@getmultiplicity
\else
% done with multiplicity for this rational root, update stuff
@@ -1290,12 +1291,12 @@
\ifnum\POL@isolz@NbOfRoots=\z@
% no roots, define empty array nevertheless
\begingroup\globaldefs\@ne
- \expandafter\xintAssignArray\expandafter\to\csname POL_ZeroMult\POL@sturmname\endcsname
+ \expandafter\xintAssignArray\expandafter\to\csname POL_ZM\POL@sturmname*\endcsname
\endgroup
\else
% all we currently know is that multiplicities are at least one
\begingroup\globaldefs\@ne
- \expandafter\POL@initarray\csname POL_ZeroMult\POL@sturmname\endcsname{1}%
+ \expandafter\POL@initarray\csname POL_ZM\POL@sturmname*\endcsname{1}%
\endgroup
% check if GCD had positive degree (hence some roots, maybe complex, have
% multiplicity)
@@ -1324,7 +1325,7 @@
\xintloop
% skip some overhead of \xintdefvar...
\XINT_expr_defvar_one{\POL@sturmname M_\x}%
- {\csname .=\csname POL_ZeroMult\POL@sturmname\x\endcsname\endcsname}%
+ {\csname .=\csname POL_ZM\POL@sturmname*\x\endcsname\endcsname}%
\edef\x{\the\numexpr\x-\@ne}%
\ifnum\x>\z@
\repeat
@@ -1396,10 +1397,10 @@
\ifnum\POL@isolzmult@haszero>\z@
\expandafter
\xdef
- \csname POL_ZeroMult\POL@originalsturmname\POL@isolzmult@index\endcsname
+ \csname POL_ZM\POL@originalsturmname*\POL@isolzmult@index\endcsname
{\the\numexpr
- \csname POL_ZeroMult\POL@originalsturmname
- \POL@isolzmult@index\endcsname+\@ne}%
+ \csname POL_ZM\POL@originalsturmname
+ *\POL@isolzmult@index\endcsname+\@ne}%
\else
% multiplicity now known, no need to check this index in future
\@namedef{POL@IfMultIsKnown\POL@isolzmult@index}{\xint_firstoftwo}%
@@ -1449,15 +1450,15 @@
\fi
\ifnum\POL@isolz@NbOfRoots=\z@
\begingroup\globaldefs\@ne
- \expandafter\xintAssignArray\expandafter\to\csname POL_ZeroInt#2L\endcsname
- \expandafter\xintAssignArray\expandafter\to\csname POL_ZeroInt#2R\endcsname
- \expandafter\xintAssignArray\expandafter\to\csname POL_ZeroIsKnown#2\endcsname
+ \expandafter\xintAssignArray\expandafter\to\csname POL_ZL#2*\endcsname
+ \expandafter\xintAssignArray\expandafter\to\csname POL_ZR#2*\endcsname
+ \expandafter\xintAssignArray\expandafter\to\csname POL_ZK#2*\endcsname
\endgroup
\else
\begingroup\globaldefs\@ne
- \expandafter\POL@initarray\csname POL_ZeroInt#2L\endcsname{0}%
- \expandafter\POL@initarray\csname POL_ZeroInt#2R\endcsname{0}%
- \expandafter\POL@initarray\csname POL_ZeroIsKnown#2\endcsname
+ \expandafter\POL@initarray\csname POL_ZL#2*\endcsname{0}%
+ \expandafter\POL@initarray\csname POL_ZR#2*\endcsname{0}%
+ \expandafter\POL@initarray\csname POL_ZK#2*\endcsname
\xint_stop_atsecondoftwo
\endgroup
\ifx\empty#1\relax\expandafter\POL@isolz@getaprioribound\fi
@@ -1697,11 +1698,11 @@
\repeat
}%
\def\POL@isolz@check{% \POL@IsoRightSign must be ready for use here
-\ifxintverbose
- \xintMessage{polexpr}{Info}%
- {\the\numexpr\POL@IsoLeftSV-\POL@IsoRightSV\relax\space roots
- in (\POL@IsoLeft@raw,\POL@IsoRight@raw] (E = \POL@isolz@E)}%
-\fi
+% \ifxintverbose
+% \xintMessage{polexpr}{Info}%
+% {\the\numexpr\POL@IsoLeftSV-\POL@IsoRightSV\relax\space roots
+% in (\POL@IsoLeft@raw,\POL@IsoRight@raw] (E = \POL@isolz@E)}%
+% \fi
\ifcase\numexpr\POL@IsoLeftSV-\POL@IsoRightSV\relax
% no root in ]left, right]
\global\POL@isolz@nextwillneedrefinefalse
@@ -1884,18 +1885,16 @@
}%
\def\POL@refine@storeleftandright{%
\expandafter
- \xdef\csname POL_ZeroInt\POL@sturmname
- L\POL@isolz@IntervalIndex\endcsname
+ \xdef\csname POL_ZL\POL@sturmname*\POL@isolz@IntervalIndex\endcsname
{\PolDecToString{\POL@IsoLeft@rawout}}%
\expandafter
- \xdef\csname POL_ZeroInt\POL@sturmname
- R\POL@isolz@IntervalIndex\endcsname
+ \xdef\csname POL_ZR\POL@sturmname*\POL@isolz@IntervalIndex\endcsname
{\PolDecToString{\POL@IsoRight@rawout}}%
% added at 0.6
\ifnum\POL@IsoRightSign=\z@
\global
\expandafter
- \let\csname POL_ZeroIsKnown\POL@sturmname\POL@isolz@IntervalIndex\endcsname
+ \let\csname POL_ZK\POL@sturmname*\POL@isolz@IntervalIndex\endcsname
\xint_stop_atfirstoftwo
\fi
\begingroup\xintglobaldefstrue
@@ -2020,8 +2019,8 @@
% le \xintRez est à cause des E positifs, car trailing zéros explicites
% si je travaillais à partir des variables xintexpr directement ne devrait
% pas être nécessaire, mais trop fragile par rapport à chgt internes possibles
- \romannumeral0\xintrez{\xintSub{\@nameuse{POL_ZeroInt#1R}{#2}}%
- {\@nameuse{POL_ZeroInt#1L}{#2}}}
+ \romannumeral0\xintrez{\xintSub{\@nameuse{POL_ZR#1*}{#2}}%
+ {\@nameuse{POL_ZL#1*}{#2}}}
}%
@@ -2029,7 +2028,7 @@
% localize roots in intervals of length at most 10^{#2}
\edef\POL@sturmname{#1}%
\edef\POL@ensure@targetE{\the\numexpr#2}%
- \edef\POL@nbofroots{\csname POL_ZeroInt\POL@sturmname L0\endcsname}%
+ \edef\POL@nbofroots{\csname POL_ZL\POL@sturmname*0\endcsname}%
\ifnum\POL@nbofroots>\z@
\expandafter\POL@ensureintervallengths
\fi
@@ -2053,7 +2052,7 @@
% peut-être autoriser -1, -2, ... ?
\ifnum\POL@isolz@IntervalIndex>\z@
% 0.7, add this safeguard but attention means this structure must be in place
- \ifnum\csname POL_ZeroInt\POL@sturmname L0\endcsname>\z@
+ \ifnum\csname POL_ZL\POL@sturmname*0\endcsname>\z@
% je ne fais pas les \expandafter mais je préfèrerai ne pas être à l'intérieur
\POL@ensure@one
\fi
@@ -2124,9 +2123,9 @@
}%
\newcommand\PolPrintIntervals@[2][Z]{\POL@PrintIntervals{#1}{#2}}%
\newcommand\POL@PrintIntervals[2]{%
- \def\PolPrintIntervalsTheSturmName{#2}%
\def\PolPrintIntervalsTheVar{#1}%
- \ifnum\@nameuse{POL_ZeroInt#2L}{0}=\z@
+ \def\PolPrintIntervalsTheSturmName{#2}%
+ \ifnum\@nameuse{POL_ZL#2*}{0}=\z@
\PolPrintIntervalsNoRealRoots
\else
\gdef\PolPrintIntervalsTheIndex{1}%
@@ -2138,6 +2137,8 @@
}\POL@tmp
\fi
\POL@AfterPrintIntervals
+ \def\PolPrintIntervalsTheVar{#1}%
+ \def\PolPrintIntervalsTheSturmName{#2}%
}%
\let\POL@AfterPrintIntervals\@empty
\newcommand\PolPrintIntervalsNoRealRoots{}%
@@ -2195,28 +2196,24 @@
\PolPrintIntervalsUnknownRoot
\xdef\PolPrintIntervalsTheIndex{\the\numexpr\PolPrintIntervalsTheIndex+\@ne}%
\unless\ifnum\PolPrintIntervalsTheIndex>
- \@nameuse{POL_ZeroInt\PolPrintIntervalsTheSturmName L0}
+ \@nameuse{POL_ZL\PolPrintIntervalsTheSturmName*0}
\POL@PrintIntervals@DoDefs
\xint_afterfi{\\\POL@PrintIntervals@Loop}%
\fi
}%
\def\POL@PrintIntervals@DoDefs{%
\xdef\PolPrintIntervalsTheLeftEndPoint{%
- \csname POL_ZeroInt%
- \PolPrintIntervalsTheSturmName L\PolPrintIntervalsTheIndex
+ \csname POL_ZL\PolPrintIntervalsTheSturmName*\PolPrintIntervalsTheIndex
\endcsname
}%
\xdef\PolPrintIntervalsTheRightEndPoint{%
- \csname POL_ZeroInt%
- \PolPrintIntervalsTheSturmName R\PolPrintIntervalsTheIndex
+ \csname POL_ZR\PolPrintIntervalsTheSturmName*\PolPrintIntervalsTheIndex
\endcsname
}%
\xdef\PolPrintIntervalsTheMultiplicity{%
- \ifcsname POL_ZeroMult%
- \PolPrintIntervalsTheSturmName\PolPrintIntervalsTheIndex
+ \ifcsname POL_ZM\PolPrintIntervalsTheSturmName*\PolPrintIntervalsTheIndex
\endcsname
- \csname POL_ZeroMult%
- \PolPrintIntervalsTheSturmName\PolPrintIntervalsTheIndex
+ \csname POL_ZM\PolPrintIntervalsTheSturmName*\PolPrintIntervalsTheIndex
\endcsname
\else
?% or use 0 ?
@@ -2226,36 +2223,36 @@
\newcommand\PolSturmIfZeroExactlyKnown[2]{% #1 = sturmname, #2=index
- \romannumeral0\csname POL_ZeroIsKnown#1\endcsname{#2}%
+ \romannumeral0\csname POL_ZK#1*\endcsname{#2}%
}%
\newcommand\POL@SturmIfZeroExactlyKnown[2]{% #1 = sturmname, #2=index
- \romannumeral0\csname POL_ZeroIsKnown#1\the\numexpr#2\endcsname
+ \romannumeral0\csname POL_ZK#1*\the\numexpr#2\endcsname
}%
\newcommand\PolSturmIsolatedZeroMultiplicity[2]{%
- \romannumeral`^^@\csname POL_ZeroMult#1\endcsname{#2}%
+ \romannumeral`^^@\csname POL_ZM#1*\endcsname{#2}%
}%
\newcommand\PolSturmIsolatedZeroLeft[2]{%
- \romannumeral`^^@\csname POL_ZeroInt#1L\endcsname{#2}%
+ \romannumeral`^^@\csname POL_ZL#1*\endcsname{#2}%
}%
\newcommand\PolSturmIsolatedZeroRight[2]{%
- \romannumeral`^^@\csname POL_ZeroInt#1R\endcsname{#2}%
+ \romannumeral`^^@\csname POL_ZR#1*\endcsname{#2}%
}%
\newcommand\PolSturmNbOfIsolatedZeros[1]{%
- \romannumeral`^^@\csname POL_ZeroInt#1L0\endcsname
+ \romannumeral`^^@\csname POL_ZL#1*0\endcsname
}%
\newcommand\PolSturmRationalRoot[2]{%
- \romannumeral`^^@\csname POL_ZeroInt#1L%
- \csname POL_RRIndex#1\endcsname{#2}\endcsname
+ \romannumeral`^^@\csname POL_ZL#1*%
+ \csname POL_RI#1*\endcsname{#2}\endcsname
}%
\newcommand\PolSturmRationalRootIndex[2]{%
- \romannumeral`^^@\csname POL_RRIndex#1\endcsname{#2}%
+ \romannumeral`^^@\csname POL_RI#1*\endcsname{#2}%
}%
\newcommand\PolSturmRationalRootMultiplicity[2]{%
- \romannumeral`^^@\csname POL_ZeroMult#1%
- \csname POL_RRIndex#1\endcsname{#2}\endcsname
+ \romannumeral`^^@\csname POL_ZM#1%
+ *\csname POL_RI#1*\endcsname{#2}\endcsname
}%
\newcommand\PolSturmNbOfRationalRoots[1]{%
- \romannumeral`^^@\csname POL_RRIndex#10\endcsname
+ \romannumeral`^^@\csname POL_RI#1*0\endcsname
}%
\newcommand\PolSturmNbOfRationalRootsWithMultiplicities[1]{%
% means the \POL@norr must not have been changed in-between...