/usr/share/axiom-20170501/src/algebra/MATCAT2.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 | )abbrev package MATCAT2 MatrixCategoryFunctions2
++ Author: Clifton J. Williamson
++ Date Created: 21 November 1989
++ Date Last Updated: 21 March 1994
++ Description:
++ \spadtype{MatrixCategoryFunctions2} provides functions between two matrix
++ domains. The functions provided are \spadfun{map} and \spadfun{reduce}.
MatrixCategoryFunctions2(R1,Row1,Col1,M1,R2,Row2,Col2,M2) : SIG == CODE where
R1 : Ring
Row1 : FiniteLinearAggregate R1
Col1 : FiniteLinearAggregate R1
M1 : MatrixCategory(R1,Row1,Col1)
R2 : Ring
Row2 : FiniteLinearAggregate R2
Col2 : FiniteLinearAggregate R2
M2 : MatrixCategory(R2,Row2,Col2)
SIG ==> with
map : (R1 -> R2,M1) -> M2
++ \spad{map(f,m)} applies the function f to the elements of the matrix m.
map : (R1 -> Union(R2,"failed"),M1) -> Union(M2,"failed")
++ \spad{map(f,m)} applies the function f to the elements of the matrix m.
reduce : ((R1,R2) -> R2,M1,R2) -> R2
++ \spad{reduce(f,m,r)} returns a matrix n where
++ \spad{n[i,j] = f(m[i,j],r)} for all indices i and j.
CODE ==> add
minr ==> minRowIndex
maxr ==> maxRowIndex
minc ==> minColIndex
maxc ==> maxColIndex
map(f:(R1->R2),m:M1):M2 ==
ans : M2 := new(nrows m,ncols m,0)
for i in minr(m)..maxr(m) for k in minr(ans)..maxr(ans) repeat
for j in minc(m)..maxc(m) for l in minc(ans)..maxc(ans) repeat
qsetelt_!(ans,k,l,f qelt(m,i,j))
ans
map(f:(R1 -> (Union(R2,"failed"))),m:M1):Union(M2,"failed") ==
ans : M2 := new(nrows m,ncols m,0)
for i in minr(m)..maxr(m) for k in minr(ans)..maxr(ans) repeat
for j in minc(m)..maxc(m) for l in minc(ans)..maxc(ans) repeat
(r := f qelt(m,i,j)) = "failed" => return "failed"
qsetelt_!(ans,k,l,r::R2)
ans
reduce(f,m,ident) ==
s := ident
for i in minr(m)..maxr(m) repeat
for j in minc(m)..maxc(m) repeat
s := f(qelt(m,i,j),s)
s
|