This file is indexed.

/usr/share/axiom-20170501/src/algebra/RMATRIX.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
85
86
87
88
89
)abbrev domain RMATRIX RectangularMatrix
++ Author: Grabmeier, Gschnitzer, Williamson
++ Date Created: 1987
++ Date Last Updated: July 1990
++ Description:
++ \spadtype{RectangularMatrix} is a matrix domain where the number of rows
++ and the number of columns are parameters of the domain.

RectangularMatrix(m,n,R) : SIG == CODE where
  m : NonNegativeInteger
  n : NonNegativeInteger
  R : Ring

  Row ==> DirectProduct(n,R)
  Col ==> DirectProduct(m,R)

  SIG ==> Join(RectangularMatrixCategory(m,n,R,Row,Col),_
                   CoercibleTo Matrix R) with
 
    if R has Field then VectorSpace R
 
    if R has ConvertibleTo InputForm then ConvertibleTo InputForm

    rectangularMatrix : Matrix R -> $
      ++ \spad{rectangularMatrix(m)} converts a matrix of type
      ++ \spadtype{Matrix} to a matrix of type \spad{RectangularMatrix}.

    coerce : $ -> Matrix R
      ++ \spad{coerce(m)} converts a matrix of type 
      ++ \spadtype{RectangularMatrix} to a matrix of type \spad{Matrix}.
 
  CODE ==> Matrix R add

    minr ==> minRowIndex
    maxr ==> maxRowIndex
    minc ==> minColIndex
    maxc ==> maxColIndex
    mini ==> minIndex
    maxi ==> maxIndex
 
    ZERO := new(m,n,0)$Matrix(R) pretend $
    0    == ZERO
 
    coerce(x:$):OutputForm == coerce(x pretend Matrix R)$Matrix(R)

    matrix(l: List List R) ==
      -- error check: this is a top level function
      #l ^= m => error "matrix: wrong number of rows"
      for ll in l repeat
        #ll ^= n => error "matrix: wrong number of columns"
      ans : Matrix R := new(m,n,0)
      for i in minr(ans)..maxr(ans) for ll in l repeat
        for j in minc(ans)..maxc(ans) for r in ll repeat
          qsetelt_!(ans,i,j,r)
      ans pretend $
 
    row(x,i)    == directProduct row(x pretend Matrix(R),i)

    column(x,j) == directProduct column(x pretend Matrix(R),j)
 
    coerce(x:$):Matrix(R) == copy(x pretend Matrix(R))
 
    rectangularMatrix x ==
      (nrows(x) ^= m) or (ncols(x) ^= n) =>
        error "rectangularMatrix: matrix of bad dimensions"
      copy(x) pretend $
 
    if R has EuclideanDomain then
 
      rowEchelon x == rowEchelon(x pretend Matrix(R)) pretend $
 
    if R has IntegralDomain then
 
      rank x    == rank(x pretend Matrix(R))

      nullity x == nullity(x pretend Matrix(R))

      nullSpace x ==
        [directProduct c for c in nullSpace(x pretend Matrix(R))]
 
    if R has Field then
 
      dimension() == (m * n) :: CardinalNumber
 
    if R has ConvertibleTo InputForm then

      convert(x:$):InputForm ==
         convert [convert("rectangularMatrix"::Symbol)@InputForm,
                  convert(x::Matrix(R))]$List(InputForm)