/usr/share/axiom-20170501/src/algebra/SUPXS.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | )abbrev domain SUPXS SparseUnivariatePuiseuxSeries
++ Author: Clifton J. Williamson
++ Date Created: 11 November 1994
++ Date Last Updated: 28 February 1995
++ Description:
++ Sparse Puiseux series in one variable
++ \spadtype{SparseUnivariatePuiseuxSeries} is a domain representing Puiseux
++ series in one variable with coefficients in an arbitrary ring. The
++ parameters of the type specify the coefficient ring, the power series
++ variable, and the center of the power series expansion. For example,
++ \spad{SparseUnivariatePuiseuxSeries(Integer,x,3)} represents Puiseux
++ series in \spad{(x - 3)} with \spadtype{Integer} coefficients.
SparseUnivariatePuiseuxSeries(Coef,var,cen) : SIG == CODE where
Coef : Ring
var : Symbol
cen : Coef
I ==> Integer
NNI ==> NonNegativeInteger
OUT ==> OutputForm
RN ==> Fraction Integer
SUTS ==> SparseUnivariateTaylorSeries(Coef,var,cen)
SULS ==> SparseUnivariateLaurentSeries(Coef,var,cen)
SUPS ==> InnerSparseUnivariatePowerSeries(Coef)
SIG ==> Join(UnivariatePuiseuxSeriesConstructorCategory(Coef,SULS),_
RetractableTo SUTS) with
coerce : Variable(var) -> %
++ coerce(var) converts the series variable \spad{var} into a
++ Puiseux series.
differentiate : (%,Variable(var)) -> %
++ \spad{differentiate(f(x),x)} returns the derivative of
++ \spad{f(x)} with respect to \spad{x}.
if Coef has Algebra Fraction Integer then
integrate : (%,Variable(var)) -> %
++ \spad{integrate(f(x))} returns an anti-derivative of the power
++ series \spad{f(x)} with constant coefficient 0.
++ We may integrate a series when we can divide coefficients
++ by integers.
CODE ==> UnivariatePuiseuxSeriesConstructor(Coef,SULS) add
Rep := Record(expon:RN,lSeries:SULS)
getExpon: % -> RN
getExpon pxs == pxs.expon
variable x == var
center x == cen
coerce(v: Variable(var)) ==
zero? cen => monomial(1,1)
monomial(1,1) + monomial(cen,0)
coerce(uts:SUTS) == uts :: SULS :: %
retractIfCan(upxs:%):Union(SUTS,"failed") ==
(uls := retractIfCan(upxs)@Union(SULS,"failed")) case "failed" =>
"failed"
retractIfCan(uls :: SULS)@Union(SUTS,"failed")
if Coef has "*": (Fraction Integer, Coef) -> Coef then
differentiate(upxs:%,v:Variable(var)) == differentiate upxs
if Coef has Algebra Fraction Integer then
integrate(upxs:%,v:Variable(var)) == integrate upxs
--% OutputForms
coerce(x:%): OUT ==
sups : SUPS := laurentRep(x) pretend SUPS
st := getStream sups; refer := getRef sups
if not(explicitlyEmpty? st or explicitEntries? st) _
and (nx := retractIfCan(elt refer)@Union(I,"failed")) case I then
count : NNI := _$streamCount$Lisp
degr := min(count,(nx :: I) + count + 1)
extend(sups,degr)
seriesToOutputForm(st,refer,variable x,center x,rationalPower x)
|