diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet index c72984e..bd5e00d 100644 --- a/books/bookvol10.4.pamphlet +++ b/books/bookvol10.4.pamphlet @@ -156347,6 +156347,481 @@ UTSodetools(F, UP, L, UTS): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package POLYVEC U32VectorPolynomialOperations} +<>= +)set break resume +)sys rm -f U32VectorPolynomialOperations.output +)spool U32VectorPolynomialOperations.output +)set message test on +)set message auto off +)clear all + +--S 1 of 1 +)show U32VectorPolynomialOperations +--R U32VectorPolynomialOperations is a package constructor +--R Abbreviation for U32VectorPolynomialOperations is POLYVEC +--R This constructor is exposed in this frame. +--R Issue )edit bookvol10.4.pamphlet to see algebra source code for POLYVEC +--R +--R------------------------------- Operations -------------------------------- +--R degree : U32Vector -> Integer +--R copy_first : (U32Vector,U32Vector,Integer) -> Void +--R copy_slice : (U32Vector,U32Vector,Integer,Integer) -> Void +--R differentiate : (U32Vector,Integer) -> U32Vector +--R differentiate : (U32Vector,NonNegativeInteger,Integer) -> U32Vector +--R divide! : (U32Vector,U32Vector,U32Vector,Integer) -> Void +--R eval_at : (U32Vector,Integer,Integer,Integer) -> Integer +--R gcd : (U32Vector,U32Vector,Integer) -> U32Vector +--R gcd : (PrimitiveArray U32Vector,Integer,Integer,Integer) -> U32Vector +--R lcm : (PrimitiveArray U32Vector,Integer,Integer,Integer) -> U32Vector +--R mul : (U32Vector,U32Vector,Integer) -> U32Vector +--R mul_by_binomial : (U32Vector,Integer,Integer) -> Void +--R mul_by_binomial : (U32Vector,Integer,Integer,Integer) -> Void +--R mul_by_scalar : (U32Vector,Integer,Integer,Integer) -> Void +--R pow : (U32Vector,PositiveInteger,NonNegativeInteger,Integer) -> U32Vector +--R remainder! : (U32Vector,U32Vector,Integer) -> Void +--R to_mod_pa : (SparseUnivariatePolynomial Integer,Integer) -> U32Vector +--R truncated_mul_add : (U32Vector,U32Vector,U32Vector,Integer,Integer) -> Void +--R truncated_multiplication : (U32Vector,U32Vector,Integer,Integer) -> U32Vector +--R vector_add_mul : (U32Vector,U32Vector,Integer,Integer,Integer,Integer) -> Void +--R vector_combination : (U32Vector,Integer,U32Vector,Integer,Integer,Integer,Integer) -> Void +--R +--E 1 + +)spool +)lisp (bye) +@ +<>= +==================================================================== +U32VectorPolynomialOperations examples +==================================================================== + +See Also: +o )show U32VectorPolynomialOperations + +@ +\pagehead{U32VectorPolynomialOperations}{POLYVEC} +\pagepic{ps/v104u32vectorpolynomialoperations.eps}{POLYVEC}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{POLYVEC}{copy\_first} & +\cross{POLYVEC}{copy\_slice} & +\cross{POLYVEC}{degree} \\ +\cross{POLYVEC}{differentiate} & +\cross{POLYVEC}{divide!} & +\cross{POLYVEC}{eval\_at} \\ +\cross{POLYVEC}{gcd} & +\cross{POLYVEC}{lcm} & +\cross{POLYVEC}{mul} \\ +\cross{POLYVEC}{mul\_by\_binomial} & +\cross{POLYVEC}{mul\_by\_scalar} & +\cross{POLYVEC}{pow} \\ +\cross{POLYVEC}{remainder!} & +\cross{POLYVEC}{to\_mod\_pa} & +\cross{POLYVEC}{truncated\_mul\_add} \\ +\cross{POLYVEC}{truncated\_multiplication} & +\cross{POLYVEC}{vector\_add\_mul} & +\cross{POLYVEC}{vector\_combination} +\end{tabular} + +<>= +)abbrev package POLYVEC U32VectorPolynomialOperations +++ Author: Waldek Hebisch +++ Description: +++ This is a low-level package which implements operations +++ on vectors treated as univariate modular polynomials. Most +++ operations takes modulus as parameter. Modulus is machine +++ sized prime which should be small enough to avoid overflow +++ in intermediate calculations. +U32VectorPolynomialOperations() : Export == Implementation where + PA ==> U32Vector + Export ==> with + copy__first : (PA, PA, Integer) -> Void + ++ copy__first(v1, v2, n) copies first n elements + ++ of v2 into n first positions in v1. + copy__slice : (PA, PA, Integer, Integer) -> Void + ++ copy__first(v1, v2, m, n) copies the slice of v2 starting + ++ at m elements and having n elements into corresponding + ++ positions in v1. + eval__at : (PA, Integer, Integer, Integer) -> Integer + ++ eval__at(v, deg, pt, p) treats v as coefficients of + ++ polynomial of degree deg and evaluates the + ++ polynomial at point pt modulo p + vector__add__mul : (PA, PA, Integer, Integer, Integer, Integer) _ + -> Void + ++ vector__add__mul(v1, v2, m, n, c, p) sets v1(m), ..., + ++ v1(n) to corresponding extries in v1 + c*v2 + ++ modulo p. + mul__by__binomial : (PA, Integer, Integer) -> Void + ++ mul__by__binomial(v, pt, p) treats v a polynomial + ++ and multiplies in place this polynomial by binomial (x + pt). + ++ Highest coefficient of product is ignored. + mul__by__binomial : (PA, Integer, Integer, Integer) -> Void + ++ mul__by__binomial(v, deg, pt, p) treats v as + ++ coefficients of polynomial of degree deg and + ++ multiplies in place this polynomial by binomial (x + pt). + ++ Highest coefficient of product is ignored. + mul__by__scalar : (PA, Integer, Integer, Integer) -> Void + ++ mul__by__scalar(v, deg, c, p) treats v as + ++ coefficients of polynomial of degree deg and + ++ multiplies in place this polynomial by scalar c + mul : (PA, PA, Integer) -> PA + ++ Polynomial multiplication. + truncated__multiplication : (PA, PA, Integer, Integer) -> PA + ++ truncated__multiplication(x, y, d, p) computes + ++ x*y truncated after degree d + truncated__mul__add : (PA, PA, PA, Integer, Integer) -> Void + ++ truncated__mul__add(x, y, z, d, p) adds to z + ++ the produce x*y truncated after degree d + pow : (PA, PositiveInteger, NonNegativeInteger, Integer) -> PA + ++ pow(u, n, d, p) returns u^n truncated after degree d, except if + ++ n=1, in which case u itself is returned + differentiate : (PA, Integer) -> PA + ++ Polynomial differentiation. + differentiate : (PA, NonNegativeInteger, Integer) -> PA + ++ Polynomial differentiation. + divide! : (PA, PA, PA, Integer) -> Void + ++ Polynomial division. + remainder! : (PA, PA, Integer) -> Void + ++ Polynomial remainder + vector__combination : (PA, Integer, PA, Integer, _ + Integer, Integer, p : Integer) -> Void + ++ vector__combination(v1, c1, v2, c2, n, delta, p) replaces + ++ first n + 1 entires of v1 by corresponding entries of + ++ c1*v1+c2*x^delta*v2 mod p. + to__mod__pa : (SparseUnivariatePolynomial Integer, Integer) -> PA + ++ to__mod__pa(s, p) reduces coefficients of polynomial + ++ s modulo primte p and converts the resut to vector + gcd : (PA, PA, Integer) -> PA + ++ Polynomial gcd. + gcd : (PrimitiveArray PA, Integer, Integer, Integer) -> PA + ++ gcd(a, lo, hi, p) computes gcd of elements + ++ a(lo), a(lo+1), ..., a(hi). + lcm : (PrimitiveArray PA, Integer, Integer, Integer) -> PA + ++ lcm(a, lo, hi, p) computes lcm of elements + ++ a(lo), a(lo+1), ..., a(hi). + degree : PA -> Integer + ++ degree(v) is degree of v treated as polynomial + + Implementation ==> add + + Qmuladdmod ==> QSMULADDMOD64_-32$Lisp + Qmuladd ==> QSMULADD64_-32$Lisp + Qmul ==> QSMULMOD32$Lisp + Qdot2 ==> QSDOT2MOD64_-32$Lisp + Qrem ==> QSMOD64_-32$Lisp + modInverse ==> invmod + + copy__first(np : PA, op : PA, n : Integer) : Void == + ns := n pretend SingleInteger + for j in 0..(ns - 1) repeat + np(j) := op(j) + + copy__slice(np : PA, op : PA, m : Integer, _ + n : Integer) : Void == + ms := m pretend SingleInteger + ns := n pretend SingleInteger + for j in ms..(ms + ns - 1) repeat + np(j) := op(j) + + eval__at(v : PA, deg : Integer, pt : Integer, _ + p : Integer) : Integer == + i : SingleInteger := deg::SingleInteger + res : Integer := 0 + while i >= 0 repeat + res := Qmuladdmod(pt, res, v(i), p) + i := i - 1 + res + + to__mod__pa(s : SparseUnivariatePolynomial Integer, p : Integer) : PA == + zero?(s) => new(1, 0)$PA + n0 := degree(s) pretend SingleInteger + ncoeffs := new((n0+1) pretend NonNegativeInteger, 0)$PA + while not(zero?(s)) repeat + n := degree(s) + ncoeffs(n) := positiveRemainder(leadingCoefficient(s), p) + s := reductum(s) + ncoeffs + + vector__add__mul(v1 : PA, v2 : PA, m : Integer, n : Integer, _ + c : Integer, p : Integer) : Void == + ms := m pretend SingleInteger + ns := n pretend SingleInteger + for i in ms..ns repeat + v1(i) := Qmuladdmod(c, v2(i), v1(i), p) + + mul__by__binomial(v : PA, n : Integer, pt : Integer, _ + p : Integer) : Void == + prev__coeff : Integer := 0 + ns := n pretend SingleInteger + for i in 0..(ns - 1) repeat + pp := v(i) + v(i) := Qmuladdmod(pt, pp, prev__coeff, p) + prev__coeff := pp + + mul__by__binomial(v : PA, pt : Integer, _ + p : Integer) : Void == + mul__by__binomial(v, #v, pt, p) + + mul__by__scalar(v : PA, n : Integer, c : Integer, _ + p : Integer) : Void == + ns := n pretend SingleInteger + for i in 0..ns repeat + v(i) := Qmul(c, v(i), p) + + degree(v : PA) : Integer == + n := #v + for i in (n - 1)..0 by -1 repeat + v(i) ~= 0 => return i + -1 + + vector__combination(v1 : PA, c1 : Integer, _ + v2 : PA, c2 : Integer, _ + n : Integer, delta : Integer, _ + p : Integer) : Void == + ns := n pretend SingleInteger + ds := delta pretend SingleInteger + if c1 ~= 1 then + for i in 0..(ds - 1) repeat + v1(i) := Qmul(v1(i), c1, p) + for i in ds..ns repeat + v1(i) := Qdot2(v1(i), c1, v2(i - ds), c2, p) + else + for i in ds..ns repeat + v1(i) := Qmuladdmod(c2, v2(i - ds), v1(i), p) + + divide!(r0 : PA, r1 : PA, res : PA, p: Integer) : Void == + dr0 := degree(r0) + dr1 := degree(r1) + c0 := r1(dr1) + c0 := modInverse(c0, p) + while dr0 >= dr1 repeat + delta := dr0 - dr1 + c1 := Qmul(c0, r0(dr0), p) + res(delta) := c1 + c1 := p - c1 + r0(dr0) := 0 + dr0 := dr0 - 1 + if dr0 < 0 then break + vector__combination(r0, 1, r1, c1, dr0, delta, p) + while r0(dr0) = 0 repeat + dr0 := dr0 - 1 + if dr0 < 0 then break + + remainder!(r0 : PA, r1 : PA, p: Integer) : Void == + dr0 := degree(r0) + dr1 := degree(r1) + c0 := r1(dr1) + c0 := modInverse(c0, p) + while dr0 >= dr1 repeat + delta := dr0 - dr1 + c1 := Qmul(c0, r0(dr0), p) + c1 := p - c1 + r0(dr0) := 0 + dr0 := dr0 - 1 + if dr0 < 0 then break + vector__combination(r0, 1, r1, c1, dr0, delta, p) + while r0(dr0) = 0 repeat + dr0 := dr0 - 1 + if dr0 < 0 then break + + gcd(x : PA, y : PA, p : Integer) : PA == + dr0 := degree(y) pretend SingleInteger + dr1 : SingleInteger + if dr0 < 0 then + tmpp := x + x := y + y := tmpp + dr1 := dr0 + dr0 := degree(y) pretend SingleInteger + else + dr1 := degree(x) pretend SingleInteger + dr0 < 0 => + dr1 < 0 => + return new(1, 0)$PA + r1 := new((dr1 + 1) pretend NonNegativeInteger, 0)$PA + copy__first(r1, x, dr1 + 1) + c := r1(dr1) + c := modInverse(c, p) + mul__by__scalar(r1, dr1, c, p) + return r1 + r0 := new((dr0 + 1) pretend NonNegativeInteger, 0)$PA + copy__first(r0, y, dr0 + 1) + r1 := new((dr1 + 1) pretend NonNegativeInteger, 0)$PA + copy__first(r1, x, dr1 + 1) + while dr1 > 0 repeat + while dr0 >= dr1 repeat + delta := dr0 - dr1 + c1 := QSDIFFERENCE(p, r0(dr0))$Lisp + c0 := r1(dr1) + if c0 ~= 1 and delta > 30 then + c0 := modInverse(c0, p) + mul__by__scalar(r1, dr1, c0, p) + c0 := 1 + r0(dr0) := 0 + dr0 := dr0 - 1 + vector__combination(r0, c0, r1, c1, dr0, delta, p) + while r0(dr0) = 0 repeat + dr0 := dr0 - 1 + if dr0 < 0 then break + tmpp := r0 + tmp := dr0 + r0 := r1 + dr0 := dr1 + r1 := tmpp + dr1 := tmp + dr1 >= 0 => + r1(0) := 1 + return r1 + c := r0(dr0) + c := modInverse(c, p) + mul__by__scalar(r0, dr0, c, p) + r0 + + gcd(a : PrimitiveArray PA, lo : Integer, hi: Integer, p: Integer) _ + : PA == + res := a(lo) + for i in (lo + 1)..hi repeat + res := gcd(a(i), res, p) + res + + lcm2(v1 : PA, v2 : PA, p : Integer) : PA == + pp := gcd(v1, v2, p) + dv2 := degree(v2) + dpp := degree(pp) + dv2 = dpp => + v1 + dpp = 0 => mul(v1, v2, p) + tmp1 := new((dv2 + 1) pretend NonNegativeInteger, 0)$PA + tmp2 := new((dv2 - dpp + 1) pretend NonNegativeInteger, 0)$PA + copy__first(tmp1, v2, dv2 + 1) + divide!(tmp1, pp, tmp2, p) + mul(v1, tmp2, p) + + lcm(a : PrimitiveArray PA, lo : Integer, hi: Integer, p: Integer) _ + : PA == + res := a(lo) + for i in (lo + 1)..hi repeat + res := lcm2(a(i), res, p) + res + + inner__mul : (PA, PA, PA, SingleInteger, SingleInteger, _ + SingleInteger, Integer) -> Void + + mul(x : PA, y : PA, p : Integer) : PA == + xdeg := degree(x) pretend SingleInteger + ydeg := degree(y) pretend SingleInteger + if xdeg > ydeg then + tmpp := x + tmp := xdeg + x := y + xdeg := ydeg + y := tmpp + ydeg := tmp + xcoeffs := x + ycoeffs := y + xdeg < 0 => x + xdeg = 0 and xcoeffs(0) = 1 => copy(y) + zdeg : SingleInteger := xdeg + ydeg + zdeg0 := (zdeg::Integer) pretend NonNegativeInteger + zcoeffs := new(zdeg0 + 1, 0)$PA + inner__mul(xcoeffs, ycoeffs, zcoeffs, xdeg, ydeg, zdeg, p) + zcoeffs + + inner__mul(x, y, z, xdeg, ydeg, zdeg, p) == + if xdeg > ydeg then + tmpp := x + tmp := xdeg + x := y + xdeg := ydeg + y := tmpp + ydeg := tmp + xdeg := + xdeg > zdeg => zdeg + xdeg + ydeg := + ydeg > zdeg => zdeg + ydeg + ss : Integer + i : SingleInteger + j : SingleInteger + for i in 0..xdeg repeat + ss := z(i) + for j in 0..i repeat + ss := Qmuladd(x(i - j), y(j), ss) + z(i) := Qrem(ss, p) + for i in (xdeg+1)..ydeg repeat + ss := z(i) + for j in 0..xdeg repeat + ss := Qmuladd(x(j), y(i-j), ss) + z(i) := Qrem(ss, p) + for i in (ydeg+1)..zdeg repeat + ss := z(i) + for j in (i-xdeg)..ydeg repeat + ss := Qmuladd(x(i - j), y(j), ss) + z(i) := Qrem(ss, p) + + truncated__mul__add(x, y, z, m, p) == + xdeg := (#x - 1) pretend SingleInteger + ydeg := (#y - 1) pretend SingleInteger + inner__mul(x, y, z, xdeg, ydeg, m pretend SingleInteger, p) + + truncated__multiplication(x, y, m, p) == + xdeg := (#x - 1) pretend SingleInteger + ydeg := (#y - 1) pretend SingleInteger + z := new((m pretend SingleInteger + 1) + pretend NonNegativeInteger, 0)$PA + inner__mul(x, y, z, xdeg, ydeg, m pretend SingleInteger, p) + z + + pow(x : PA, n : PositiveInteger, d: NonNegativeInteger, _ + p : Integer) : PA == + one? n => x + odd?(n)$Integer => + truncated__multiplication(x, + pow(truncated__multiplication(x, x, d, p), + shift(n,-1) pretend PositiveInteger, + d, + p), + d, + p) + pow(truncated__multiplication(x, x, d, p), + shift(n,-1) pretend PositiveInteger, + d, + p) + + differentiate(x: PA, p: Integer): PA == + d := #x - 1 + if zero? d then empty()$PA + else + r := new(d::NonNegativeInteger, 0)$PA + for i in 0..d-1 repeat + i1 := i+1 + r.i := Qmul(i1, x.i1, p) + r + + differentiate(x: PA, n: NonNegativeInteger, p: Integer): PA == + zero? n => x + d := #x - 1 + if d < n then empty()$PA + else + r := new((d-n+1) pretend NonNegativeInteger, 0)$PA + for i in n..d repeat + j := i-n + f := j+1 + for k in j+2..i repeat f := Qmul(f, k, p) + r.(j pretend NonNegativeInteger) := Qmul(f, x.i, p) + r + +@ +<>= +"POLYVEC" [color="#FF4488",href="bookvol10.4.pdf#nameddest=POLYVEC"] +"A1AGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=A1AGG"] +"POLYVEC" -> "A1AGG" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter V} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package VECTOR2 VectorFunctions2} diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet index cc22727..56721b0 100644 --- a/books/bookvol5.pamphlet +++ b/books/bookvol5.pamphlet @@ -24011,6 +24011,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed. (|UniversalSegmentFunctions2| . UNISEG2) (|UserDefinedVariableOrdering| . UDVO) (|U32Vector| . U32VEC) + (|U32VectorPolynomialOperations| . POLYVEC) (|Vector| . VECTOR) (|VectorFunctions2| . VECTOR2) (|ViewDefaultsPackage| . VIEWDEF) diff --git a/books/ps/v104u32vectorpolynomialoperations.eps b/books/ps/v104u32vectorpolynomialoperations.eps new file mode 100644 index 0000000..8ddd59f --- /dev/null +++ b/books/ps/v104u32vectorpolynomialoperations.eps @@ -0,0 +1,266 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Graphviz version 2.20.2 (Mon Mar 30 10:09:11 UTC 2009) +%%For: (root) root +%%Title: pic +%%Pages: 1 +%%BoundingBox: 36 36 124 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 124 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 88 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +% POLYVEC +gsave +[ /Rect [ 0 72 80 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=POLYVEC) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +0 108 lineto +0 72 lineto +80 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +0 108 lineto +0 72 lineto +80 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +7.5 85.9 moveto 65 (POLYVEC) alignedtext +grestore +% A1AGG +gsave +[ /Rect [ 7 0 73 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=A1AGG) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 73 36 moveto +7 36 lineto +7 0 lineto +73 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 73 36 moveto +7 36 lineto +7 0 lineto +73 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +14.5 13.9 moveto 51 (A1AGG) alignedtext +grestore +% POLYVEC->A1AGG +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 40 72 moveto +40 64 40 55 40 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 43.5 46 moveto +40 36 lineto +36.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 43.5 46 moveto +40 36 lineto +36.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +end +restore +%%EOF diff --git a/changelog b/changelog index e141ec7..fa2c66b 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,8 @@ +20100801 wxh src/axiom-website/patches.html 20100801.02.wxh.patch +20100801 wxh src/algebra/Makefile test and help for POLYVEC +20100801 wxh books/bookvol5 expose U32VectorPolynomialOperations +20100801 wxh books/bookvol10.4 add U32VectorPolynomialOperations +20100801 wxh books/ps/v104u32vectorpolynomialoperations.eps added 20100801 tpd src/axiom-website/patches.html 20100801.01.wxh.patch 20100801 tpd books/bookvolbib add GCL92, AS64, NIST10, RF94 20100801 tpd src/input/Makefile add risch.input diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index 48a5d9f..c06e32a 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -4468,8 +4468,8 @@ LAYER9=\ ${OUT}/DIRPROD2.o ${OUT}/IMATRIX.o ${OUT}/INTRVL.o \ ${OUT}/IVECTOR.o ${OUT}/LOCPOWC.o \ ${OUT}/LODO1.o ${OUT}/LODO2.o ${OUT}/LPOLY.o \ - ${OUT}/LSMP.o ${OUT}/LSMP1.o ${OUT}/MATCAT2.o ${OUT}/PROJPL.o \ - ${OUT}/PTCAT.o ${OUT}/STRICAT.o ${OUT}/TRIMAT.o \ + ${OUT}/LSMP.o ${OUT}/LSMP1.o ${OUT}/MATCAT2.o ${OUT}/POLYVEC.o \ + ${OUT}/PROJPL.o ${OUT}/PTCAT.o ${OUT}/STRICAT.o ${OUT}/TRIMAT.o \ layer9done @ @@ -4660,6 +4660,22 @@ LAYER9=\ "MATCAT2" -> "MATCAT" /*"MATCAT2" -> "ARR2CAT"*/ +"POLYVEC" [color="#FF4488",href="bookvol10.4.pdf#nameddest=POLYVEC"] +"POLYVEC" -> "A1AGG" +/*"POLYVEC" -> {"SINT"; "NNI"; "INT"; "FLAGG"; "LNAGG"; "IXAGG"; "HOAGG"}*/ +/*"POLYVEC" -> {"AGG"; "TYPE"; "SETCAT"; "BASTYPE"; "KOERCE"; "EVALAB"}*/ +/*"POLYVEC" -> {"IEVALAB"; "ELTAGG"; "ELTAB"; "CLAGG"; "KONVERT"; "ORDSET"}*/ +/*"POLYVEC" -> {"BOOLEAN"; "INS"; "UFD"; "GCDDOM"; "INTDOM"; "COMRING"}*/ +/*"POLYVEC" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/ +/*"POLYVEC" -> {"SGROUP"; "MONOID"; "LMODULE"; "BMODULE"; "RMODULE"; "PI"}*/ +/*"POLYVEC" -> {"ALGEBRA"; "MODULE"; "ENTIRER"; "EUCDOM"; "PID"; "OINTDOM"}*/ +/*"POLYVEC" -> {"ORDRING"; "OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "DIFRING"}*/ +/*"POLYVEC" -> {"RETRACT"; "LINEXP"; "PATMAB"; "CFCAT"; "REAL"; "CHARZ"}*/ +/*"POLYVEC" -> {"STEP"; "INS-"; "EUCDOM-"; "UFD-"; "GCDDOM-"; "INTDOM-"}*/ +/*"POLYVEC" -> {"ALGEBRA-"; "DIFRING-"; "ORDRING-"; "MODULE-"; "RING-"}*/ +/*"POLYVEC" -> {"ABELGRP-"; "ABELMON-"; "MONOID-"; "ORDSET-"; "ABELSG-"}*/ +/*"POLYVEC" -> {"SGROUP-"; "SETCAT-"; "RETRACT-"; "BASTYPE-"; "PRIMARR"}*/ + "PROJPL" [color="#88FF44",href="bookvol10.3.pdf#nameddest=PROJPL"] /*"PROJPL" -> {"PRSPCAT"; "SETCATD"; "SETCAT"; "BASTYPE"; "KOERCE"; "FIELD"}*/ "PROJPL" -> "PROJSP" @@ -17967,6 +17983,7 @@ SPADHELP=\ ${HELP}/UnivariateTaylorSeriesCategory.help \ ${HELP}/UniversalSegment.help \ ${HELP}/U32Vector.help \ + ${HELP}/U32VectorPolynomialOperations.help \ ${HELP}/Variable.help \ ${HELP}/Vector.help \ ${HELP}/VectorCategory.help \ @@ -18647,6 +18664,7 @@ REGRESS= \ UnivariateTaylorSeriesCategory.regress \ UniversalSegment.regress \ U32Vector.regress \ + U32VectorPolynomialOperations.regress \ Variable.regress \ Vector.regress \ VectorCategory.regress \ @@ -26740,6 +26758,18 @@ ${HELP}/U32Vector.help: ${BOOKS}/bookvol10.3.pamphlet >${INPUT}/U32Vector.input @echo "U32Vector (U32VEC)" >>${HELPFILE} +${HELP}/U32VectorPolynomialOperations.help: ${BOOKS}/bookvol10.4.pamphlet + @echo 8200 create U32VectorPolynomialOperations.help from \ + ${BOOKS}/bookvol10.4.pamphlet + @${TANGLE} -R"U32VectorPolynomialOperations.help" \ + ${BOOKS}/bookvol10.4.pamphlet \ + >${HELP}/U32VectorPolynomialOperations.help + @cp -f ${HELP}/U32VectorPolynomialOperations.help ${HELP}/POLYVEC.help + @${TANGLE} -R"U32VectorPolynomialOperations.input" \ + ${BOOKS}/bookvol10.4.pamphlet \ + >${INPUT}/U32VectorPolynomialOperations.input + @echo "U32VectorPolynomialOperations (POLYVEC)" >>${HELPFILE} + ${HELP}/Variable.help: ${BOOKS}/bookvol10.3.pamphlet @echo 5000 create Variable.help from \ ${BOOKS}/bookvol10.3.pamphlet diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 2ba2c63..c3b5fcb 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -3043,5 +3043,7 @@ books/ps/v104streamtensor.eps added
books/bookvol10.3 add U32Vector, move GOPT0 from bookvol10.4
20100801.01.wxh.patch books/bookvolbib Geddes GCL92 Abramowitz AS64 Olver NIST10 Richardson RF94
+20100801.02.wxh.patch +books/bookvol10.4 add U32VectorPolynomialOperations