|
1 | | -function evalmap(vars, x::Vector, varorder::Vector{PolyVar}) |
2 | | - vals = Any[var for var in vars] |
3 | | - for (i, var) in enumerate(varorder) |
4 | | - j = findfirst(vars, var) |
5 | | - # If i == 0, that means that the variable is not present |
6 | | - # so it is ignored |
7 | | - if j > 0 |
8 | | - vals[j] = x[i] |
| 1 | +function evalmap{T}(vars, x::Vector{T}, varorder::Vector{PolyVar}) |
| 2 | + if vars == varorder |
| 3 | + x |
| 4 | + else |
| 5 | + vals = Vector{T}(length(vars)) |
| 6 | + for (i, var) in enumerate(varorder) |
| 7 | + j = findfirst(vars, var) |
| 8 | + # If i == 0, that means that the variable is not present |
| 9 | + # so it is ignored |
| 10 | + if j > 0 |
| 11 | + vals[j] = x[i] |
| 12 | + end |
9 | 13 | end |
| 14 | + for i in 1:length(vals) |
| 15 | + @assert isdefined(vals, i) "Variable $(vars[i]) was not assigned a value" |
| 16 | + end |
| 17 | + vals |
10 | 18 | end |
11 | | - vals |
12 | 19 | end |
13 | 20 |
|
14 | 21 | function monoeval(z::Vector{Int}, vals::Vector) |
|
39 | 46 |
|
40 | 47 | function (p::VecPolynomial)(x::Vector, varorder) |
41 | 48 | vals = evalmap(vars(p), x, varorder) |
42 | | - q = zero(p) |
43 | | - for i in 1:length(p) |
44 | | - q += p.a[i] * monoeval(p.x.Z[i], vals) |
45 | | - end |
46 | | - q |
| 49 | + sum(i -> p.a[i] * monoeval(p.x.Z[i], vals), 1:length(p)) |
47 | 50 | end |
48 | 51 |
|
49 | 52 | function (p::MatPolynomial)(x::Vector, varorder) |
|
0 commit comments