From 076635117d18350a7f9fa5cf2ca4bd966e513483 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 5 Feb 2019 21:56:17 +0000 Subject: polexpr (5feb19) git-svn-id: svn://tug.org/texlive/trunk@49948 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/polexpr/polexpr.sty | 121 ++++++++++++------------ 1 file changed, 59 insertions(+), 62 deletions(-) (limited to 'Master/texmf-dist/tex/latex/polexpr') 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... -- cgit v1.2.3