# JuMP print sub-expressions

**URL:** <https://discourse.julialang.org/t/jump-print-sub-expressions/43021>\
**Category:** Optimization (Mathematical)\
**Tags:** jump\
**Created:** [July 14, 2020, 7:21am UTC](https://discourse.julialang.org/t/jump-print-sub-expressions/43021 "2020-07-14T07:21:24Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![fnbillimoria](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fnbillimoria/32/16518_2.png) [@fnbillimoria](https://discourse.julialang.org/u/fnbillimoria)\
**Post date:** [July 14, 2020, 7:21am UTC](https://discourse.julialang.org/t/jump-print-sub-expressions/43021/1 "2020-07-14T07:21:24Z")

</div>

Hello,

I have created an optimisation problem in JuMP with a set constraints that is created from affine and non-linear expressions. When i print() the model, the constraints show up as below. Is there any way to print the full expanded constraint, or potentially even the sub-expressions that make up the constraint? I would like to check whether the formulation is being created properly. Grateful for any assistance. Many thanks,

(0\_vr[1] ^ 2.0 + 0\_vi[1] ^ 2.0) \* (0\_cr[(1, 1, 3)] ^ 2.0 + 0\_ci[(1, 1, 3)] ^ 2.0) - 90.0 ^ 2.0 \<= 0  
(0\_vr[3] ^ 2.0 + 0\_vi[3] ^ 2.0) \* (0\_cr[(1, 3, 1)] ^ 2.0 + 0\_ci[(1, 3, 1)] ^ 2.0) - 90.0 ^ 2.0 \<= 0  
subexpression[20] - subexpression[22] == 0  
subexpression[21] - subexpression[23] == 0  
subexpression[34] - subexpression[36] == 0  
subexpression[35] - subexpression[37] == 0  
subexpression[48] - subexpression[50] == 0  
subexpression[49] - subexpression[51] == 0

---

<div class="post-metadata">

**Author:** ![tomerarnon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tomerarnon/32/3170_2.png) [@tomerarnon](https://discourse.julialang.org/u/tomerarnon)\
**Post date:** [July 14, 2020, 10:50am UTC](https://discourse.julialang.org/t/jump-print-sub-expressions/43021/2 "2020-07-14T10:50:54Z")

</div>

You can do this if you name the constraint (upon creation or after), or if you use `all_constraints` with the right constraint type.

```julia-repl
julia> m = Model();

julia> @variable(m, x[1:3]);

julia> @constraint(m, c, x[1]^2 + 3x[2]^2 + 2x[3]^2 >= 0)
c : x[1]² + 3 x[2]² + 2 x[3]² ≥ 0.0

# method 1 (use the name)
julia> c
c : x[1]² + 3 x[2]² + 2 x[3]² ≥ 0.0

julia> m[:c]
c : x[1]² + 3 x[2]² + 2 x[3]² ≥ 0.0

# method 2

julia> all_constraints(m, GenericQuadExpr{Float64,VariableRef}, MOI.GreaterThan{Float64})
1-element Array{ConstraintRef{Model,MathOptInterface.ConstraintIndex{MathOptInterface.ScalarQuadraticFunction{Float64},MathOptInterface.GreaterThan{Float64}},ScalarShape},1}:
 c : x[1]² + 3 x[2]² + 2 x[3]² ≥ 0.0

# method 3

julia> c = @constraint(m, x[1]^2 + 3x[2]^2 + 2x[3]^2 >= 0)
x[1]² + 3 x[2]² + 2 x[3]² ≥ 0.0

julia> set_name(c, "My name")

julia> constraint_by_name(m, "My name")
My name : x[1]² + 3 x[2]² + 2 x[3]² ≥ 0.0

```

You can find out which constraint types are in your model with `list_of_constraint_types`

---

<div class="post-metadata">

**Author:** ![fnbillimoria](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/fnbillimoria/32/16518_2.png) [@fnbillimoria](https://discourse.julialang.org/u/fnbillimoria)\
**Post date:** [July 22, 2020, 12:02am UTC](https://discourse.julialang.org/t/jump-print-sub-expressions/43021/3 "2020-07-22T00:02:19Z")

</div>

Many thanks! This is most appreciated.

---

<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 22, 2020, 1:48am UTC](https://discourse.julialang.org/t/jump-print-sub-expressions/43021/4 "2020-07-22T01:48:24Z")

</div>

For nonlinear expressions, subexpression printing isn’t implemented. There is an open issue: [https://github.com/jump-dev/JuMP.jl/issues/1983](https://github.com/jump-dev/JuMP.jl/issues/1983)
