File: ggb2mpreduce.properties

package info (click to toggle)
geogebra 4.0.34.0%2Bdfsg1-9
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, sid, trixie
  • size: 23,932 kB
  • sloc: java: 220,978; xml: 786; javascript: 211; sh: 116; makefile: 27
file content (196 lines) | stat: -rw-r--r-- 24,226 bytes parent folder | download | duplicates (4)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
####
# Command translation table from GeoGebra to MPReduce
# e.g. Expand[ 2(x+3) ] is translated to ExpandBrackets( 2*(x+3) )
###

Binomial.2=<< begin scalar n!!, k!!, result1!!, result2!!; n!!:=%0; k!!:=%1; result1!!:= if numberp(n!!) and numberp(k!!) and k!!>n!! then 0 else factorial(n!!)/(factorial(k!!)*factorial(n!!-k!!)); let list(gamma(~w+1) => factorial(w)); result2!!:=result1!!; clear {gamma(~w+1) => factorial}; return result2!! end >>
BinomialDist.4=<< begin scalar n!!, p!!, k!!; n!!:=%0; p!!:=%1; k!!:=%2;return if %3='true then for i:=1:floor(k!!) sum binomial(n!!,i)*p!!^i*(1-p!!)^(n!!-i) else binomial(n!!,k!!)*p!!^k!!*(1-p!!)^(n!!-k!!) end >>
Cauchy.3=1/2+1/pi*atan(((%2)-(%1))/(%0))
CFactor.1=<<on complex$ off combinelogs$ begin scalar factorlist!!; factorlist!!:=factorize(%0); return part(!*hold((for each x in factorlist!! collect (if arglength(x)<0 or part(x,0) neq 'list then x else if part(x,2)=1 then part(x,1) else part(x,0):=**))),0):=* end >>
CFactor.2=<<on complex$ off combinelogs$ begin scalar factorlist!!; korder %1; factorlist!!:=factorize(%0); korder nil;return part(!*hold(for each x in factorlist!! collect (if arglength(x)<0 or part(x,0) neq 'list then x else if part(x,2)=1 then part(x,1) else part(x,0):=**)),0):=* end >>
ChiSquared.2=igamma((%0)/2,(%1)/2)/gamma((%0)/2)
Coefficients.1=reverse(coeff(%0,ggbcasvarx))
Coefficients.2=reverse(coeff(%0,%1))
CommonDenominator.2=lcm(den(%0),den(%1))
Covariance.2=<<begin scalar ret, tmpmean1, tmpmean2, tmplength; ret:=0$ tmpmean1:=0$ tmpmean2:=0$ tmplength:=length(%0)$ tmpmean1:=1/tmplength*for i:=1:tmplength sum part(%0,i) $ tmpmean2:=1/tmplength*for i:=1:tmplength sum part(%1,i)$  return 1/tmplength*for i:=1:tmplength sum (part(%0,i)-tmpmean1)*(part(%1,i)-tmpmean2) end>>
Covariance.1=<<begin scalar ret, tmpmean1, tmpmean2, tmplength; ret:=0$ tmpmean1:=0$ tmpmean2:=0$ tmplength:=length(%0)$ tmpmean1:=1/tmplength*for i:=1:tmplength sum part(part(%0,i),1) $ tmpmean2:=1/tmplength*for i:=1:tmplength sum part(part(%0,i),2)$ return 1/tmplength*for i:=1:tmplength sum (part(part(%0,i),1)-tmpmean1)*(part(part(%0,i),2)-tmpmean2) end>>
Cross.2=cross(%0,%1)
CSolutions.1=<<on complex$ flattenlist(for each element!! in mycsolve(%0,ggbcasvarx) collect map(rhs,element!!))>>
CSolutions.2=<<on complex$ flattenlist(for each element!! in mycsolve(%0,%1) collect map(rhs,element!!))>>
CSolve.1=<<on complex$ flattenlist(mycsolve(%0,ggbcasvarx))>>
CSolve.2=<<on complex$ flattenlist(mycsolve(%0,%1))>>

Decimal.1=<<on rounded$ (%0)>>
Degree.1=deg(%0,ggbcasvarx)
Degree.2=deg(%0,%1)
Delete.1= << clear %0; 'true>>
Denominator.1=den(%0)
Derivative.1=df(%0,ggbcasvarx)
Derivative.2=df(%0,%1)
Derivative.3=df(%0,%1,%2)
Determinant.1=<<tmpmat!!:=%0; det(tmpmat!!)>>
Dimension.1=length(%0)
Div.2=div(%0,%1)
Division.2=list(div(%0,%1),mod!!(%0,%1))
Divisors.1=<<off combinelogs$ if numberp(%0) then if (%0)=1 then 1 else for each i in map(part(~w,2)+1,factorize(%0)) product i else '?>>
DivisorsList.1=<<off combinelogs$ if numberp(%0) then if %0=1 then list(1) else <<begin scalar divlist!!, return!!; divlist!!:=for each x in factorize(%0) collect for i:=0:part(x,2) collect part(x,1)^i; return!!:=part(divlist!!,1); for i:=2:length(divlist!!) do return!!:=for each x in part(divlist!!,i) join for each y in return!! collect x*y; return mysort(return!!) end>> else '? >>
DivisorsSum.1=<<off combinelogs$ if numberp(%0) then if %0=1 then 1 else for each x in factorize(%0) product (part(x,1)^(part(x,2)+1)-1)/(part(x,1)-1) else '? >>
Dot.2=dot(%0,%1)

Element.2=part(%0,%1)
Element.3=<<clear input!!; input!!:=%0; if arglength(input!!)>-1 and part(input!!,0)='mat then input!!(%1,%2) else for i:=%1:%2 collect part(input!!,i)>>
Expand.1=<<clear tmp!!; off factor, pri, combinelogs$ on div, expandlogs$ tmp!!:=%0; off factor, pri, combinelogs$ on div, expandlogs$  tmp!!>>
ExpandComplex.1=<<clear tmp!!; off factor, pri, combinelogs$ on div, complex, expandlogs$ tmp!!:=%0; off factor, pri, combinelogs$ on div, expandlogs$  tmp!!>>
Exponential.2=1-exp(-(%0)*(%1))

Factor.1=<<off combinelogs$ begin scalar factorlist!!, tmpexp!!; if numberp(den(%0)) then <<factorlist!!:=factorize(%0); return part(!*hold((for each x in factorlist!! collect (if arglength(x)<0 or part(x,0) neq \\'list then x else if part(x,2)=1 then part(x,1) else part(x,0):=**))),0):=*>> else <<on factor; tmpexp!!:=(%0); on factor; return tmpexp!! >> end >>
Factor.2=<<off combinelogs$ begin scalar factorlist!!; korder append(list(%1),varorder!!); factorlist!!:=factorize(%0); korder varorder!!;return part(!*hold(for each x in factorlist!! collect (if arglength(x)<0 or part(x,0) neq \\'list then x else if part(x,2)=1 then part(x,1) else part(x,0):=**)),0):=* end >>
Factors.1=<<off combinelogs$ off complex, rounded; for each x in factorize(%0) collect if arglength(x)<0 or part(x,0) neq \\'list then x:=list(x,1) else x >>
FDistribution.3=betaRegularized((%0)/2,(%1)/2,(%0)*(%2)/((%0)*(%2)+%1))
First.1=list(first(%0))
First.2=<<begin scalar list!!; list!!:=%0; return if length(list!!)<=%1 then list!! else for i:=1:%1 collect part(list!!,i) end>>
FractionalPart.1=if (%0)>0 then %0-floor(%0) else %0-ceiling(%0)

#These implementations follow the one in GeoGebra
FitExp.1=<<on rounded, roundall, numval; begin scalar p1!!, p2!!, input!!, sigmax!!, sigmay!!, sigmaxy!!, sigmax2!!, length!!, denominator!!, xlist!!, ylist!!; input!!:=mattolistoflists(%0); xlist!!:=map(part(~w!!,1), input!!); ylist!!:=map(log,map(part(~w!!,2), input!!)); length!!:=length(ylist!!); sigmax!!:=for each i in xlist!! sum i; sigmay!!:= for each i in ylist!! sum i; sigmax2!!:= for each i in xlist!! sum i^2; sigmaxy!!:=for i:=1:length!! sum part(xlist!!,i)*part(ylist!!,i);denominator!!:= length!!*sigmax2!!-sigmax!!**2; p2!!:=(length!!*sigmaxy!!-sigmax!!*sigmay!!)/denominator!!; p1!!:= exp((sigmay!!*sigmax2!!-sigmax!!*sigmaxy!!)/denominator!!); return p1!!*exp(x*p2!!) end>>
FitLog.1=<<on rounded, roundall, numval; begin scalar p1!!, p2!!, input!!, sigmax!!, sigmay!!, sigmaxy!!, sigmax2!!, length!!, denominator!!, xlist!!, ylist!!; input!!:=mattolistoflists(%0); xlist!!:=map(log,map(part(~w!!,1), input!!)); ylist!!:=map(part(~w!!,2), input!!); length!!:=length(ylist!!); sigmax!!:=for each i in xlist!! sum i; sigmay!!:= for each i in ylist!! sum i; sigmax2!!:= for each i in xlist!! sum i^2; sigmaxy!!:=for i:=1:length!! sum part(xlist!!,i)*part(ylist!!,i);denominator!!:= length!!*sigmax2!!-sigmax!!**2; p2!!:=(length!!*sigmaxy!!-sigmax!!*sigmay!!)/denominator!!; p1!!:= (sigmay!!*sigmax2!!-sigmax!!*sigmaxy!!)/denominator!!; return p1!!+log(x)*p2!! end >>
FitPoly.2=<< clear tmpx!!, tmpy!!; on rounded, roundall, numval; begin scalar xvec!!, yvec!!, input!!; input!!:= mattolistoflists(%0); xvec!!:=map(part(~w!!,1), input!!); yvec!!:= map(part(~w!!,2), input!!); tmpx!!:=vandermonde(xvec!!); tmpx!!:=sub\\_matrix(tmpx!!,for i:=1:length(input!!) collect i, for i:=1:(%1+1) collect i); tmpy!!:=listtocolumnvector(yvec!!);tmpx!!:=(1/(tp(tmpx!!)*tmpx!!))*tp(tmpx!!); tmpy!!:=tmpx!!*tmpy!!; return for i:=1:part(length(tmpy!!),1) sum tmpy!!(i,1)*x^(i-1) end>>
FitPow.1=<<on rounded, roundall, numval; begin scalar p1!!, p2!!, input!!, sigmax!!, sigmay!!, sigmaxy!!, sigmax2!!, length!!, denominator!!, xlist!!, ylist!!; input!!:=mattolistoflists(%0); xlist!!:=map(log,map(part(~w!!,1), input!!)); ylist!!:=map(log,map(part(~w!!,2), input!!)); length!!:=length(ylist!!); sigmax!!:=for each i in xlist!! sum i; sigmay!!:= for each i in ylist!! sum i; sigmax2!!:= for each i in xlist!! sum i^2; sigmaxy!!:=for i:=1:length!! sum part(xlist!!,i)*part(ylist!!,i);denominator!!:= length!!*sigmax2!!-sigmax!!**2; p2!!:=(length!!*sigmaxy!!-sigmax!!*sigmay!!)/denominator!!; p1!!:= exp((sigmay!!*sigmax2!!-sigmax!!*sigmaxy!!)/denominator!!); return p1!!*x^p2!! end >>
#FitSin

Gamma.3=(((%1)*(%2))^(%0))/(%0)*kummerm(%0,%0+1,-(%1)*(%2))/beta(%0)
GCD.2=<<begin scalar gcd!!; off rounded, roundall, numval; gcd!!:=gcd(%0,%1); if numeric!!=0 then off rounded, roundall, numval; return gcd!! end>>
GCD.1=<<begin scalar gcd!!; off rounded, roundall, numval; gcd!!:=0; for each term in (%0) do gcd!!:=gcd(gcd!!,term); if numeric!!=0 then off rounded, roundall, numval; return gcd!! end >>
#GetPrecision.1

HyperGeometric.5=<<begin scalar m,kk,ng,n; m:=%1$ ng:=%0$ n:=%2$ kk:=%3$ return if %4=true then sum(binomial(m,k)*binomial((ng-m),(n-k))/binomial(ng,n),k,0,kk) else binomial(m,kk)*binomial((ng-m),(n-kk))/binomial(ng,n) end>>

Identity.1=<<make\\_identity(%0)>>
Imaginary.1=impart(%0)
ImplicitDerivative.3=-df(%0,%1)/df(%0,%2)
Integral.1=<<begin scalar integral!!; let intrules!!; integral!!:=int(%0,ggbcasvarx); clearrules intrules!!;  return if  freeof(integral!!,\\'int) then part(list(integral!!,newarbconst()),0):=+ else \\'? end>>
Integral.2=<<begin scalar integral!!; let intrules!!; integral!!:=int(%0,%1); clearrules intrules!!; return if freeof(integral!!,\\'int) then part(list(integral!!,newarbconst()),0):=+ else \\'? end>>
Integral.3=<<begin scalar integral!!; let intrules!!; integral!!:=int(%0,ggbcasvarx,%1,%2); clearrules intrules!!; return if freeof(integral!!,\\'int) then integral!! else \\'? end>>
Integral.4=<<begin scalar integral!!; let intrules!!; integral!!:=int(%0,%1,%2,%3); clearrules intrules!!; return if freeof(integral!!,\\'int) then integral!! else \\'? end>>
IntegralBetween.4=<< begin scalar integral!!; let intrules!!; integral!!:=int(%0-(%1),ggbcasvarx,%2,%3); clearrules intrules!!; return if freeof(integral!!,\\'int) then integral!! else \\'? end >>
IntegralBetween.5=<< begin scalar integral!!; let intrules!!; integral!!:=int(%0-(%1),%2,%3,%4); clearrules intrules!!; return if freeof(integral!!,\\'int) then integral!! else \\'? end >>
Intersect.2=<<begin scalar eqn1!!, eqn2!!; eqn1!!:=%0; eqn2!!:=%1; if freeof(eqn1!!,=) then eqn1!!:= eqn1!!=ggbcasvary; if freeof(eqn2!!,=) then eqn2!!:= eqn2!!=ggbcasvary; return flattenlist(for each element!! in mysolve(list(eqn1!!,eqn2!!),list(ggbcasvarx, ggbcasvary)) collect map(rhs,element!!)) end>>
Invert.1=1/(%0)
IntegerPart.1=if %0>0 then floor(%0) else ceiling(%0)
IsPrime.1=if primep(%0) and (%0)>1 then true else false
#IsBound.1=if << symbolic; p!!:=isbound!!('%0); algebraic; p!!>>=1 then 'true else 'false

Last.1=<<begin scalar list!!; list!!:=%0; return list(part(list!!,length(list!!))) end >>
Last.2=<<begin scalar list!!; list!!:=%0; return if length(list!!)<=%1 then list!! else for i:=1:%1 collect part(list!!,length(list!!)-%1+i) end >>
LCM.1=<<begin scalar lcm!!; off rounded, roundall, numval; lcm!!:=1; for each term in (%0) do lcm!!:=lcm(lcm!!,term); if numeric!!=0 then off rounded, roundall, numval; return lcm!! end >>
LCM.2=<<begin scalar lcm!!; off rounded, roundall, numval; lcm!!:=lcm(%0,%1); if numeric!!=0 then off rounded, roundall, numval; return lcm!! end>>
LeftSide.1=<<begin scalar input!!; input!!:=%0; return if arglength(input!!) and part(%0,0)='list then map(lhs,input!!) else lhs(input!!) end>>
Length.3=int(sqrt(1+df(%0,ggbcasvarx)^2),ggbcasvarx,%1,%2)
Length.4=int(sqrt(1+df(%0,%1)^2),%1,%2,%3)
Limit.2=<<begin scalar input!!,limitabove!!, limitbelow!!; input!!:=(%0); return if (%1)=infinity or (%1)=-infinity then limit(input!!, ggbcasvarx, %1) else <<limitabove!!:=limit!+(input!!,ggbcasvarx,%1); limitbelow!!:=limit!-(input!!,ggbcasvarx,%1); if limitabove!!=limitbelow!! then limitabove!! else \\'?>> end>>
Limit.3=<<begin scalar input!!,limitabove!!, limitbelow!!; input!!:=(%0); return if (%2)=infinity or (%2)=-infinity then limit(input!!, %1, %2) else <<limitabove!!:=limit!+(input!!,%1,%2); limitbelow!!:=limit!-(input!!,%1,%2); if limitabove!!=limitbelow!! then limitabove!! else \\'?>> end>>
LimitAbove.2=limit!+(%0,ggbcasvarx,%1)
LimitAbove.3=limit!+(%0,%1,%2)
LimitBelow.2=limit!-(%0,ggbcasvarx,%1)
LimitBelow.3=limit!-(%0,%1,%2)

Max.N=max(%)
MatrixRank.1=rank(%0)
Mean.1=<<begin scalar list!!; list!!:=%0$ return 1/length(list!!)*for i:=1:length(list!!) sum part(list!!,i) end>>
Median.1=<<begin scalar list!!; list!!:=%0$ list!!:= mysort list!!$ return if remainder(length(list!!),2)=0 then (part(list!!,length(list!!)/2)+part(list!!,1+length(list!!)/2))/2 else part(list!!,(length(list!!)+1)/2) end>>
Min.N=min(%)
Mod.2=mod!!(%0,%1)

NextPrime.1=if %0<2 then 2 else nextprime(%0)
NIntegral.3=<<on numval, roundall$ num\\_int(%0,ggbcasvarx=((%1) .. (%2))) >>
NIntegral.4=<<on numval, roundall$ num\\_int(%0,%1=((%2) .. (%3))) >>
Normal.3=1/2*(1+erf((%2-(%0))/sqrt(2*(%1)^2)))
nPr.2=factorial(%0)/factorial(%0-%1)
NRoot.2=(%0)^(1/(%1))
NSolve.1=<<on rounded, numval, roundall$ num\\_solve(%0,ggbcasvarx, iterations=10000) >>
NSolve.2=<<on rounded, numval, roundall$ num\\_solve(%0,%1, iterations=10000) >>
NSolutions.1=<<on rounded, numval, roundall$ map(rhs,num\\_solve(%0,ggbcasvarx, iterations=10000)) >>
NSolutions.2=<<on rounded, numval, roundall$ map(rhs,num\\_solve(%0,%1, iterations=10000)) >>
Numerator.1=num(%0)
Numeric.1=<<numeric!!:=1; on rounded, roundall, numval$ if printprecision!!<=16 then <<print\\_precision(printprecision!!)$ %0>> else <<precision(printprecision!!)$ print\\_precision(printprecision!!)$ %0 >> >>
Numeric.2=<<numeric!!:=1; on rounded, roundall, numval$ if %1<=16 then <<print\\_precision(%1)$ %0>> else <<precision(%1)$ print\\_precision(%1)$ %0 >> >>

OrthogonalVector.1=if arglength(%0)>-1 and part(%0,0)='list then list(-part(%0,2),part(%0,1)) else if arglength(%0)>-1 and part(%0,0)='mat then part mat((0,-1),(1,0))*(%0)

PartialFractions.1=part(pf(%0,ggbcasvarx),0):=+
PartialFractions.2=part(pf(%0,%1),0):=+
Pascal.4=if %3=true then betaRegularized(%0,1+floor(%2),%1) else (1-(%1))^(%2)*(%1)^(%0)*binomial(%0+%2-1,%0-1)
Poisson.3=if %2=true then exp(-(%0))*for i:=0:(%1) sum (%0)^i/factorial(floor(i)) else (%0)^(%1)/factorial(floor(%1))*exp(-%0)
PreviousPrime.1=<<begin scalar tmp!!;return if (%0)>2 then <<tmp!!:=%0-1; while not(primep(tmp!!)) do tmp!!:=tmp!!-1; tmp!!>> else '? end>>
PrimeFactors.1=<<off combinelogs, rounded; if (%0)=1 then {} else begin scalar factorlist!!; factorlist!!:=factorize(%0); factorlist!!:= for each x!! in factorlist!! collect for i:=1:part(x!!,2) collect part(x!!,1); return mkdepthone(factorlist!!) end>>
Product.1=<< begin scalar input!!; input!!:=%0; return for i:=1:length(input!!) product part(input!!,i) end >>
Product.4=prod(%0,%1,%2,%3)
#Prog.1=<<%0>>
#Prog.2=<<begin scalar %0; return %1 end>>
MixedNumber.1=<<begin scalar result!!, input!!; off pri; input!!:=%0; if part(input!!,0) neq quotient then result!!:=list(input!!,0) else <<arguments!!:=(part(abs(input!!),0):=list); result!!:=list(sign(input!!)*div(first(arguments!!), second(arguments!!)), mod!!(first(arguments!!), second(arguments!!))/second(arguments!!))>>; return if part(result!!,2)=0 then part(result!!,1) else if part(result!!,1)=0 then sign(input!!)*part(result!!,2) else if input!!<0 then part(result!!,0):=- else part(result!!,0):=+ end>>

Random.2=random(%1-%0+1)+%0
RandomBinomial.2=<<on rounded, roundall, numval; for each x in for i:=1:%0 collect random(10000000)/10000000 sum if (x<%1) then 1 else 0 >>
RandomElement.1=part(%0,random(length(%0))+1)
RandomPoisson.1=<<on rounded, roundall, numval; begin scalar L!!, k!!, p!!; L!!:=exp(-%0); k!!:=0; p!!:=1; repeat <<k!!:=k!!+1; p!!:=p!!*(random(10000000)/10000000)>> until p!!<=L!!; return k!!-1 end>>
RandomNormal.2=<<on rounded, roundall, numval; %0+(%1)*cos(2*pi*random(10000000)/10000000)*sqrt(-2*log(random(10000000)/10000000)) >>
RandomPolynomial.3=<<begin scalar a, b, min!!, max!!; min!!:=myround(%1); max!!:=myround(%2); a:=for i:=0:%0-1 sum (random(max!!-(min!!)+1)+(min!!))*ggbcasvarx^i; return a+ggbcasvarx^(%0)*if min!!<=0 and max!!>0 then <<b:=random(max!!-(min!!))+(min!!); if b>=0 then b+1 else b>> else random(max!!-(min!!)+1)+min!! end>>
RandomPolynomial.4=<<begin scalar a, b, min!!, max!!; min!!:=myround(%2); max!!:=myround(%3); a:=for i:=0:%1-1 sum (random(max!!-min!!+1)+min!!)*(%0)^i; return a+(%0)^(%1)*if min!!<=0 and max!!>0 then <<b:=random(max!!-min!!)+min!!; if b>=0 then b+1 else b>> else random(max!!-min!!+1)+min!! end>>
Rationalize.1=<<off rounded; %0 >>
Real.1=repart(%0)
RightSide.1=<<begin scalar input!!; input!!:=%0; return if arglength(input!!) and part(%0,0)='list then map(rhs,input!!) else rhs(input!!) end>>
Root.1=flattenlist(mysolve(%0,ggbcasvarx))
ReducedRowEchelonForm.1=<<begin scalar tmpcolumn!!; clear tmpmatrix!!; tmpmatrix!!:=%0$ tmpcolumn!!:=1$ for i:=1:row\\_dim(tmpmatrix!!) do <<if tmpcolumn!!<column\\_dim(tmpmatrix!!) and tmpmatrix!!(i,tmpcolumn!!)=0 then while (tmpcolumn!!<=column\\_dim(tmpmatrix!!) and tmpmatrix!!(i,tmpcolumn!!)=0 and i<=row\\_dim(tmpmatrix!!)) do << for j:=i+1:row\\_dim(tmpmatrix!!) do if (j<=column\\_dim(tmpmatrix!!) and tmpmatrix!!(i,j) neq 0) then tmpmatrix!!:=swap\\_rows(tmpmatrix!!,tmpcolumn!!, j)$ if (tmpmatrix!!(i,tmpcolumn!!)=0) then tmpcolumn!!:=tmpcolumn!!+1 >>$ if tmpcolumn!!<=column\\_dim(tmpmatrix!!) then if tmpmatrix!!(i, tmpcolumn!!) neq 0 then << tmpmatrix!!:=pivot(tmpmatrix!!,i,tmpcolumn!!); tmpmatrix!!:=mult\\_rows(tmpmatrix!!,i,1/tmpmatrix!!(i,tmpcolumn!!))$ tmpcolumn!!:=tmpcolumn!!+1 >>; >>$ return tmpmatrix!! end>>

Sample.2=<< begin scalar list!!; list!!:=%0; return for i:=1:%1 collect part(list!!,1+random(length(list!!))) end >>
Sample.3=<< begin scalar list!!; list!!:=%0; return if %2=true then for i:=1:%1 collect part(list!!,1+random(length(list!!))) else <<list!!:=shuffle(list!!); for i:=1:%1 collect part(list!!,i)>> end >>
SampleVariance.1=<< begin scalar n!!, list!!; list!!:=%0; n!!:=length(list!!); return 1/(n!!-1)*(for each i in list!! sum i^2)-1/(n!!^2-n!!)*(for each i in list!! sum i)^2 end >>
SampleSD.1=<< begin scalar n!!, list!!; list!!:=%0; n!!:=length(list!!); return sqrt(1/(n!!-1)*(for each i in list!! sum i^2)-1/(n!!^2-n!!)*(for each i in list!! sum i)^2) end >>
Sequence.1=<<listofliststomat(for i:=1:(%0) collect i)>>
Sequence.4=<<listofliststomat(<<begin scalar %1; return for %1:=(%2):(%3) collect (%0) end>>)>>
Sequence.5=<<listofliststomat(<<begin scalar %1; return for %1:=(%2) step (%4) until (%3) collect (%0) end>>)>>
SetSignificantNumbersNumeric.1=printprecision!!:=%0
SD.1=<<begin scalar tmpmean, tmplist; tmplist:=%0$ tmpmean:=0$ tmpmean:= (1/length(tmplist))*for i:=1:length(tmplist) sum part(tmplist,i)$ return sqrt((1/length(tmplist))*for i:=1:length(tmplist) sum (part(tmplist,i)^2-tmpmean^2)) end>>
Shuffle.1=shuffle(%0)
Simplify.1=<<on combinelogs; trigsimp(%0, combine)>>
#SimplifyFull.1=trigsimp(%0, combine)
Solutions.1=flattenlist(for each element!! in mysolve(%0,ggbcasvarx) collect map(rhs,element!!))
Solutions.2=flattenlist(for each element!! in mysolve(%0,%1) collect map(rhs,element!!))
Solve.1=flattenlist(mysolve(aeval(%0),ggbcasvarx))
Solve.2=<< begin scalar equations!!; equations!!:=%0; if arglength(equations!!)>-1 and part(equations!!,0)='list then equations!!:=mkdepthone(equations!!); return flattenlist(mysolve(aeval(equations!!),%1)) end >>
SolveODE.1=<<begin scalar tmpret, tmpeqn; tmpeqn:=%0$ if freeof(tmpeqn,=) then tmpret:=odesolve(df(ggbcasvary,ggbcasvarx)=tmpeqn,ggbcasvary,ggbcasvarx) else tmpret:=odesolve(tmpeqn,ggbcasvary,ggbcasvarx)$ return if length(tmpret)=1 then first(tmpret) else tmpret end>>
SolveODE.3=<<begin scalar tmpret, tmpeqn; tmpeqn:=%0$ if freeof(tmpeqn,=) then tmpret:=odesolve(df(%1,%2)=tmpeqn,%1,%2) else tmpret:=odesolve(tmpeqn,%1,%2)$ return if length(tmpret)=1 then first(tmpret) else tmpret end>>
Substitute.2=<<if keepinput!!=1 then <<keepinput!!:=2; sub(%1, !*hold(%0)) >> else begin scalar rulelist!!, replacements!!; replacements!!:=%1; if arglength(replacements!!)>-1 and part(replacements!!,0)='list then 0 else replacements!!:=list(replacements!!); rulelist!!:= for each element in replacements!! collect part(element,0):=replaceby; return %0 where rulelist!! end>>
#Substitute.3=if hold!!=0 then sub(%1=%2,%0) else sub(%1=%2,!*hold(%0))
Substitute.3=<<if keepinput!!=1 then <<keepinput!!:=2; sub(%1=%2, !*hold(%0)) >> else begin scalar rulelist!!; rulelist!!:=list(%1,%2); rulelist!!:=list(part(rulelist!!,0):=replaceby); return %0 where rulelist!! end>>
#SubstituteParallel.2=if hold!!=0 then sub(%1,%0) else sub(%1,!*hold(%0))
Sum.1=<<begin scalar input!!; input!!:=%0;return for i:=1:length(input!!) sum part(input!!,i) end>>
Sum.4=<<begin scalar sm!!; sm!!:=if %2=-infinity and %3=infinity then limit(limit(sum(%0,%1,k!!,m!!),k!!,-infinity),m!!,infinity) else if %2=-infinity then limit(sum(%0,%1,k!!,%3),k!!,-infinity) else if %3=infinity then limit(sum(%0,%1,%2,k!!),k!!,infinity) else sum(%0,%1,%2,%3); return if freeof(sm!!,'sum) then sm!! else '? end>>

Take.3=<<begin scalar tmpret, list!!; list!!:=%0; tmpret:=list()$ for i:=%1:%2 do tmpret:=part(list!!,i).tmpret$ return reverse(tmpret) end>>
TaylorSeries.3=<<on div$ off pri$ taylortostandard(taylor(%0,ggbcasvarx,%1,%2))>>
TaylorSeries.4=<<on div$ off pri$ taylortostandard(taylor(%0,%1,%2,%3))>>
TDistribution.2=<<begin scalar t!!,n!!; n!!:=%0; t!!:=%1 ;beta!Regularized(((t!!+sqrt(t!!^2+n!!)/(2*sqrt(t!!^2+n!!)),n!!/2,n!!/2)
ToComplex.1=<<begin scalar list!!; list!!:=%0; return part(list!!,1)+i*part(list!!,2) end >>
ToExponential.1=<< begin scalar real!!, imag!!, input!!, mag!!, phi!!; input!!:=%0; if arglength(input!!)>-1 and part(input!!,0)='list then <<real!!:= part(input!!,1); imag!!:=part(input!!,2)>> else <<real!!:= repart(input!!); imag!!:=impart(input!!)>>;mag!!:=sqrt(real!!^2+imag!!^2); phi!!:=myatan2(imag!!,real!!); return if mag!!=0 then 0 else if phi!!=0 then mag!! else if mag!!=1 then part(list(i*phi!!),0):=exp else part(list(mag!!,part(list(i*phi!!),0):=exp),0):=* end>>
ToPolar.1=<< begin scalar input!!; input!!:=%0; return if arglength(input!!)>-1 and part(input!!,0)='list then if length(input!!)=2 then part(list(sqrt(part(input!!,1)^2+part(input!!,2)^2),myatan2(part(input!!,2),part(input!!,1))),0):=polartopoint!\u00a7 else '? else part(list(sqrt(repart(input!!)^2+impart(input!!)^2),myatan2(impart(input!!),repart(input!!))),0):=polartopoint!\u00a7 end >>
ToPoint.1=<< begin scalar input!!; input!!:=%0; return part(if arglength(input!!)>-1 and part(input!!,0)='list then input!! else list(repart(input!!),impart(input!!)),0):=point!\u00a7 end >>
Transpose.1=tp(<<listofliststomat(%0)>>)
#http://reduce-algebra.com/docs/trigsimp.pdf
TrigExpand.1=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0)))
TrigExpand.2=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0), part(%1,0)))
TrigExpand.3=<< begin scalar input1!!; input1!!:=sub(list(ggbcasvarx=x),%2); return sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0), input1!!, part(%1,0))) end >>
TrigExpand.4=<< begin scalar input1!!, input2!!; input1!!:=sub(list(ggbcasvarx=x),%2); input2!!:=sub(list(ggbcasvarx=x),%3); return sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0), input1!!, input2!!, part(%1,0))) end >>
TrigSimplify.1=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0),compact))
TrigCombine.1=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0),combine))
TrigCombine.2=sub(list(x=ggbcasvarx),trigsimp(sub(list(ggbcasvarx=x),%0),part(%1,0),combine))

Unique.1=mkset(%0)
UnitOrthogonalVector.1=<<begin; clear mat!!,norm!!; input!!:=%0;return if arglength(input!!)>-1 and part(input!!,0)='list then if length(input!!) neq 2 then '? else <<norm!!:=sqrt(<<for each i in input!! sum i^2>>); list(-part(input!!,2)/norm!!,part(input!!,1)/norm!!) >> else if length(input!!)=list(2,1) then <<norm!!:=sqrt(<<for i:=1:row\\_dim(input!!) sum input!!(i,1)^2>>); norm!!*mat((0,-1),(1,0))*input!! >> else if length(input!!)=list(1,2) then <<norm!!:=sqrt(<<for i:=1:column\\_dim(input!!) sum input!!(1,i)^2>>); norm!!*input!!*mat((0,-1),(1,0)) >> else '? end >>
UnitVector.1=<<begin; clear input!!; input!!:=%0; return if arglength(input!!)>-1 and part(input!!,0)='list then map(~w/sqrt(<<for each i in input!! sum i^2>>),input!!) else input!!/sqrt(<<for i:=1:row\\_dim(input!!) sum input!!(i,1)^2>>) end>>

Variance.1=<<begin scalar x!!,n!!,xd!!; x!!:=%0$ n!!:=length(x!!)$ xd!!:=1/n!!*for each i in x!! sum i; return 1/n!!* for each i in x!! sum (i-xd!!)**2 end>>

Weibull.3=1-exp(-(%0)*(%2)^(%1))

Zipf.4=<<begin scalar s; s:= %1; return if %3=true then harmonic(%2,s)/harmonic(%0,s) else 1/((%2)^s*harmonic(%0,s)) end>>