# Error in JuMP @NLexpression

I am running the following code with Julia 0.6.4:

``````using JuMP
using NLopt
using SpecialFunctions

function FisherInf(args...)
N = 32

t = [x[i] for i=1:N]
lambda = [args[i] for i=N+1:2N]
w      = x[2N+1]
Phi    = x[2N+2]
A      = x[2N+3]

e = 0.0
N = length(t)
g = zeros(2)
H = zeros(2,2)
for j=1:N
xj = w*t[j] - Phi
e += lambda[j]*t[j]^2*sin(xj)^2
g[1] += lambda[j]*t[j]*sin(w*t[j])^2
g[2] += lambda[j]*t[j]*sin(w*t[j])*cos(w*t[j])
H[1,1] += lambda[j]*sin(xj)^2
H[1,2] += lambda[j]*sin(xj)*cos(xj)
H[2,2] += lambda[j]*cos(xj)^2
end
e = A^2*e
g[1] = - A^2*g[1]
g[2] = - A*g[2]
H[1,1] = A^2*H[1,1]
H[1,2] = A*H[1,2]
H[2,1] = H[1,2]

return e - g' * (H \ g)
end

function m2(args...)
N = 32

t = [args[i] for i=1:N]
lambda = [args[i] for i=N+1:2N]
w1   = args[2N+1]
Phi1 = args[2N+2]
A1   = args[2N+3]
w2   = args[2N+4]
Phi2 = args[2N+5]
A2   = args[2N+6]

s_1cos = sqrt.(lambda) .* cos.(w1*t)
s_1sin = sqrt.(lambda) .* sin.(w1*t)
s_2cos = sqrt.(lambda) .* cos.(w2*t)
s_2sin = sqrt.(lambda) .* sin.(w2*t)

ds_1cos = dot(s_1cos, s_1cos)
ds_2cos = dot(s_2cos, s_2cos)
ds_12cos = dot(s_1cos, s_2cos)

ds_1sin = dot(s_1sin, s_1sin)
ds_2sin = dot(s_2sin, s_2sin)
ds_12sin = dot(s_1sin, s_2sin)

bmin_cos_m = (ds_1cos + ds_2cos - sqrt((ds_1cos - ds_2cos)^2 + 4*ds_12cos^2)) / 2
bmin_cos_p = (ds_1cos + ds_2cos + sqrt((ds_1cos - ds_2cos)^2 + 4*ds_12cos^2)) / 2
bmin_sin_m = (ds_1sin + ds_2sin - sqrt((ds_1sin - ds_2sin)^2 + 4*ds_12sin^2)) / 2
bmin_sin_p = (ds_1sin + ds_2sin + sqrt((ds_1sin - ds_2sin)^2 + 4*ds_12sin^2)) / 2

lambda_min = min([min([bmin_cos_m, bmin_cos_p]), min([bmin_sin_m, bmin_sin_p])])

return A1^2 * lambda_min
end

N = 32
nw = 64
nphi = 32
A = 31.6228

STFE = Model()

p = -1
Pfalse = 0.01
Eps = pi/100

t = [i/N for i=-(N-1):2:(N+1)]

(nodes_w, weights_w) = gausshermite(nw)
(nodes_phi, weights_phi) = gausshermite(nphi)

JuMP.register(STFE, :FI, 2N+3, FisherInf, autodiff=true)
JuMP.register(STFE, :M2, 2N+6, m2, autodiff=true)

@variable(STFE, lambda[1:N])
@variable(STFE, 0 <= w1 <= pi)
@variable(STFE, 0 <= w2 <= pi)
@variable(STFE, -pi/2 <= Phi1 <= pi/2)
@variable(STFE, -pi/2 <= Phi2 <= pi/2)
@variable(STFE, 0 <= A1 <= 1000)
@variable(STFE, 0 <= A2 <= 1000)

@NLexpression(STFE, integrand2[i=1:64, j=1:32], abs(p) / p * FI(t...,lambda...,nodes_w[i],nodes_phi[j],A)^p)
@NLexpression(STFE, integrand1[i=1:nw], sum(integrand2[i,k] * weights_phi[k] for k in 1:nphi))

@NLconstraint(STFE, amb_constr, M2(t...,lambda...,w1,Phi1,A1,w2,Phi2,A2) > 8*erfinv(sqrt(1-2Pfalse))^2/A^2)
@constraint(STFE, diag_constr, -Eps <= w1-w2 <= Eps)
@objective(STFE, Max, dot(integrand1[:], weights_w))

solve(STFE)
println("lambda_opt = ", getvalue(lambda))
``````

I am getting this error:

``````MethodError: no method matching parseNLExpr_runtime(::JuMP.Model, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Float64, ::Array{ReverseDiffSparse.NodeData,1}, ::Int64, ::Array{Float64,1})
Closest candidates are:
parseNLExpr_runtime(::JuMP.Model, ::Number, ::Any, ::Any, ::Any) at C:\Users\arbenede\.julia\v0.6\JuMP\src\parsenlp.jl:196
parseNLExpr_runtime(::JuMP.Model, ::JuMP.Variable, ::Any, ::Any, ::Any) at C:\Users\arbenede\.julia\v0.6\JuMP\src\parsenlp.jl:202
parseNLExpr_runtime(::JuMP.Model, ::JuMP.NonlinearExpression, ::Any, ::Any, ::Any) at C:\Users\arbenede\.julia\v0.6\JuMP\src\parsenlp.jl:208
``````

I believe that that I have followed all the guidelines in the documentationâ€¦

Any ideas?

Thanks much

-Arrigo