# Error with building NLexpression in JuMP 0.19.2

**URL:** <https://discourse.julialang.org/t/error-with-building-nlexpression-in-jump-0-19-2/26998>\
**Category:** Optimization (Mathematical)\
**Created:** [July 30, 2019, 9:29pm UTC](https://discourse.julialang.org/t/error-with-building-nlexpression-in-jump-0-19-2/26998 "2019-07-30T21:29:14Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![pulsipher](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pulsipher/32/10461_2.png) [@pulsipher](https://discourse.julialang.org/u/pulsipher)\
**Post date:** [July 30, 2019, 9:29pm UTC](https://discourse.julialang.org/t/error-with-building-nlexpression-in-jump-0-19-2/26998/1 "2019-07-30T21:29:14Z")

</div>

I ran into this unexpected error when trying to build a nonlinear expression.

```julia
julia> mean_vs = @NLexpression(model, [i = 1:num_buses], sum(prod2.get([m-1, m-1]) *
                               (vre_coeffs[i, m]^2 + vim_coeffs[i, m]^2) for m = 1:num_basis))
ERROR: LoadError: MethodError: no method matching _is_sum(::Expr)
Closest candidates are:
  _is_sum(::Symbol) at [user-dir]\.julia\packages\JuMP\ibcEh\src\macros.jl:8
Stacktrace:
 [1] _parse_NL_expr(::Symbol, ::Expr, ::Symbol, ::Symbol, ::Symbol) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:40
 [2] _parse_NL_expr(::Symbol, ::Expr, ::Symbol, ::Symbol, ::Symbol) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:124
 [3] (::getfield(JuMP, Symbol("##80#81")){Symbol,Symbol,Symbol})(::Expr) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:34
 [4] _parse_gen(::Expr, ::getfield(JuMP, Symbol("##80#81")){Symbol,Symbol,Symbol}) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_expr.jl:325
 [5] _parse_gen(::Expr, ::getfield(JuMP, Symbol("##80#81")){Symbol,Symbol,Symbol}) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_expr.jl:347
 [6] _parse_NL_expr(::Symbol, ::Expr, ::Symbol, ::Int64, ::Symbol) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:34
 [7] _process_NL_expr(::Symbol, ::Expr) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:232
 [8] @NLexpression(::LineNumberNode, ::Module, ::Vararg{Any,N} where N) at [user-dir]\.julia\packages\JuMP\ibcEh\src\macros.jl:1639
in expression starting at REPL[15]:1

```

`vre_coeffs` and `vim_coeffs` are variables and `prod2.get` simply returns a float. Am I doing something wrong or is this some sort of bug? Thanks!

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [July 31, 2019, 6:39am UTC](https://discourse.julialang.org/t/error-with-building-nlexpression-in-jump-0-19-2/26998/2 "2019-07-31T06:39:49Z")

</div>

Hi there!

Please read [Please read: make it easier to help you](https://discourse.julialang.org/t/psa-make-it-easier-to-help-you/14757) and provide a minimal working example that reproduces the same error.

However, that looks like a bug because you should probably get a nicer error message. It might be because of the `prod2.get`. What happens if you try:

```nohighlight
prod2_get = [prod2.get([m-1, m-1]) for m in 1:num_basis]
@NLexpression(model, [i = 1:num_buses], sum(
    prod2_get[m] * (vre_coeffs[i, m]^2 + vim_coeffs[i, m]^2) 
    for m = 1:num_basis)
)

```

---

<div class="post-metadata">

**Author:** ![pulsipher](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pulsipher/32/10461_2.png) [@pulsipher](https://discourse.julialang.org/u/pulsipher)\
**Post date:** [July 31, 2019, 3:12pm UTC](https://discourse.julialang.org/t/error-with-building-nlexpression-in-jump-0-19-2/26998/3 "2019-07-31T15:12:28Z")

</div>

Thanks for the link, I am new to using discourse.

`prod2.get` is indeed the problem. I wasn’t aware scalar functions weren’t allowed in JuMP NLexpressions. In this particular case a meaningful error message is not provided since the function is stored in a struct. A minimal example is provided below:

Input

```julia
using JuMP
myfunc(t) = 1
struct MyStruct
   func::Function
end
my_object = MyStruct(myfunc)
m = Model()
@variable(m, x[1:2])
@NLexpression(m, sum(my_object.func(i) * x[i] for i = 1:2))

```

Error Output

```julia
ERROR: LoadError: MethodError: no method matching _is_sum(::Expr)
Closest candidates are:
  _is_sum(::Symbol) at [user-dir]\.julia\packages\JuMP\ibcEh\src\macros.jl:8
Stacktrace:
 [1] _parse_NL_expr(::Symbol, ::Expr, ::Symbol, ::Symbol, ::Symbol) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:40
 [2] _parse_NL_expr(::Symbol, ::Expr, ::Symbol, ::Symbol, ::Symbol) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:124
 [3] (::getfield(JuMP, Symbol("##80#81")){Symbol,Symbol,Symbol})(::Expr) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:34
 [4] _parse_gen(::Expr, ::getfield(JuMP, Symbol("##80#81")){Symbol,Symbol,Symbol}) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_expr.jl:325
 [5] _parse_gen(::Expr, ::getfield(JuMP, Symbol("##80#81")){Symbol,Symbol,Symbol}) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_expr.jl:347
 [6] _parse_NL_expr(::Symbol, ::Expr, ::Symbol, ::Int64, ::Symbol) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:34
 [7] _process_NL_expr(::Symbol, ::Expr) at [user-dir]\.julia\packages\JuMP\ibcEh\src\parse_nlp.jl:232
 [8] @NLexpression(::LineNumberNode, ::Module, ::Vararg{Any,N} where N) at [user-dir]\.julia\packages\JuMP\ibcEh\src\macros.jl:1639
in expression starting at REPL[7]:1

```

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [August 1, 2019, 6:12am UTC](https://discourse.julialang.org/t/error-with-building-nlexpression-in-jump-0-19-2/26998/4 "2019-08-01T06:12:35Z")

</div>

Thanks for finding this bug and providing a simple example! You’re correct that we don’t detect that it is a function because of the struct.

I’ve opened an issue: [https://github.com/JuliaOpt/JuMP.jl/issues/2016](https://github.com/JuliaOpt/JuMP.jl/issues/2016)

---

<div class="post-metadata">

**Author:** ![miles.lubin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/miles.lubin/32/279_2.png) [@miles.lubin](https://discourse.julialang.org/u/miles.lubin)\
**Post date:** [August 3, 2019, 10:23pm UTC](https://discourse.julialang.org/t/error-with-building-nlexpression-in-jump-0-19-2/26998/5 "2019-08-03T22:23:53Z")

</div>

Thanks for the report. We have a fix incoming for the bad error message: [https://github.com/JuliaOpt/JuMP.jl/pull/2017](https://github.com/JuliaOpt/JuMP.jl/pull/2017).
