@@ -25,6 +25,8 @@ function parse_expression(data::MOI.Nonlinear.Model, input)
2525 return expr
2626end
2727
28+ parse_expression (data, expr, item, parent) = MOI. Nonlinear. parse_expression (data, expr, item, parent)
29+
2830function parse_expression (
2931 data:: MOI.Nonlinear.Model ,
3032 expr:: MOI.Nonlinear.Expression ,
@@ -111,6 +113,70 @@ function eval_multivariate_function(
111113 operator = registry. registered_multivariate_operators[offset]
112114 @assert length (x) == operator. N
113115 ret = operator. f (x)
114- check_return_type (T, ret)
116+ MOI . Nonlinear . check_return_type (T, ret)
115117 return ret:: T
116118end
119+
120+ function _parse_vect_expression (
121+ stack:: Vector{Tuple{Int,Any}} ,
122+ data:: MOI.Nonlinear.Model ,
123+ expr:: MOI.Nonlinear.Expression ,
124+ x:: Expr ,
125+ parent_index:: Int ,
126+ )
127+ @assert Meta. isexpr (x, :vect )
128+ id = get (data. operators. multivariate_operator_to_id, :vect , nothing )
129+ push! (expr. nodes, MOI. Nonlinear. Node (MOI. Nonlinear. NODE_CALL_MULTIVARIATE, id, parent_index))
130+ for i in length (x. args): - 1 : 1
131+ push! (stack, (length (expr. nodes), x. args[i]))
132+ end
133+ return
134+ end
135+
136+ function _parse_row_expression (
137+ stack:: Vector{Tuple{Int,Any}} ,
138+ data:: MOI.Nonlinear.Model ,
139+ expr:: MOI.Nonlinear.Expression ,
140+ x:: Expr ,
141+ parent_index:: Int ,
142+ )
143+ @assert Meta. isexpr (x, :row )
144+ id = get (data. operators. multivariate_operator_to_id, :row , nothing )
145+ push! (expr. nodes, MOI. Nonlinear. Node (MOI. Nonlinear. NODE_CALL_MULTIVARIATE, id, parent_index))
146+ for i in length (x. args): - 1 : 1
147+ push! (stack, (length (expr. nodes), x. args[i]))
148+ end
149+ return
150+ end
151+
152+ function _parse_hcat_expression (
153+ stack:: Vector{Tuple{Int,Any}} ,
154+ data:: MOI.Nonlinear.Model ,
155+ expr:: MOI.Nonlinear.Expression ,
156+ x:: Expr ,
157+ parent_index:: Int ,
158+ )
159+ @assert Meta. isexpr (x, :hcat )
160+ id = get (data. operators. multivariate_operator_to_id, :hcat , nothing )
161+ push! (expr. nodes, MOI. Nonlinear. Node (MOI. Nonlinear. NODE_CALL_MULTIVARIATE, id, parent_index))
162+ for i in length (x. args): - 1 : 1
163+ push! (stack, (length (expr. nodes), x. args[i]))
164+ end
165+ return
166+ end
167+
168+ function _parse_vcat_expression (
169+ stack:: Vector{Tuple{Int,Any}} ,
170+ data:: MOI.Nonlinear.Model ,
171+ expr:: MOI.Nonlinear.Expression ,
172+ x:: Expr ,
173+ parent_index:: Int ,
174+ )
175+ @assert Meta. isexpr (x, :vcat )
176+ id = get (data. operators. multivariate_operator_to_id, :vcat , nothing )
177+ push! (expr. nodes, MOI. Nonlinear. Node (MOI. Nonlinear. NODE_CALL_MULTIVARIATE, id, parent_index))
178+ for i in length (x. args): - 1 : 1
179+ push! (stack, (length (expr. nodes), x. args[i]))
180+ end
181+ return
182+ end
0 commit comments