This method evaluates an object of type SLProgram on a given input. The two matrices inp and out should both be mutable, of the same sizes, and be defined over the same ring.
i1 : declareVariable X; declareVariable C; |
i3 : XpC = X+C o3 = (X + C) o3 : SumGate |
i4 : XXC = productGate{X,X,C}
o4 = (X * X * C)
o4 : ProductGate
|
i5 : detXCCX = detGate{{X,C},{C,X}}
o5 = det| X C |
| C X |
o5 : DetGate
|
i6 : XoC = X/C
X
o6 = -
C
o6 : DivideGate
|
i7 : slp = makeSLProgram(matrix{{C,X}},matrix{{XXC,detXCCX,XoC,XpC+2}})
o7 = SLProgram{cache => CacheTable{} }
constant positions => {-3}
constants => | 2 |
number of inputs => 2
number of outputs => 4
RawSLProgram => SLProgram (
consts+vars: 3
noninput nodes: 5
output nodes: 4
)
variable positions => {-1, -2}
o7 : SLProgram
|
i8 : inp = mutableMatrix{{1.2,-1}}
o8 = | 1.2 -1 |
o8 : MutableMatrix
|
i9 : out = mutableMatrix(ring inp,1,4) o9 = | 0 0 0 0 | o9 : MutableMatrix |
i10 : evaluate(slp,inp,out) |
i11 : clean_0.001(out - mutableMatrix {{1.2, -.44, -.833333, 2.2}}) == 0
o11 = true
|
The straight-line program can also be evaluated at different inputs in different rings:
i12 : inp = mutableMatrix{{-5,3}}
o12 = | -5 3 |
o12 : MutableMatrix
|
i13 : out = mutableMatrix(ring inp,1,4) o13 = 0 o13 : MutableMatrix |
i14 : evaluate(slp, inp, out) |
i15 : out o15 = | -45 -66 3 0 | o15 : MutableMatrix |