@@ -64,6 +64,61 @@ function test_objective_dot_bivariate()
6464 return
6565end
6666
67+ function test_objective_hcat_0dim ()
68+ model = Nonlinear. Model ()
69+ x1 = MOI. VariableIndex (1 )
70+ x2 = MOI. VariableIndex (2 )
71+ x3 = MOI. VariableIndex (3 )
72+ x4 = MOI. VariableIndex (4 )
73+ Nonlinear. set_objective (model, :(dot ([$ x1 $ x3], [$ x2 $ x4])))
74+ evaluator = Nonlinear. Evaluator (model, ArrayDiff. Mode (), [x1, x2, x3, x4])
75+ MOI. initialize (evaluator, [:Grad ])
76+ sizes = evaluator. backend. objective. expr. sizes
77+ @test sizes. ndims == [0 , 2 , 0 , 0 , 2 , 0 , 0 ]
78+ @test sizes. size_offset == [0 , 2 , 0 , 0 , 0 , 0 , 0 ]
79+ @test sizes. size == [1 , 2 , 1 , 2 ]
80+ @test sizes. storage_offset == [0 , 1 , 3 , 4 , 5 , 7 , 8 , 9 ]
81+ x1 = 1.0
82+ x2 = 2.0
83+ x3 = 3.0
84+ x4 = 4.0
85+ println (MOI. eval_objective (evaluator, [x1, x2, x3, x4]))
86+ @test MOI. eval_objective (evaluator, [x1, x2, x3, x4]) == 14.0
87+ g = ones (4 )
88+ MOI. eval_objective_gradient (evaluator, g, [x1, x2, x3, x4])
89+ @test g == [2.0 , 1.0 , 4.0 , 3.0 ]
90+ return
91+ end
92+
93+ function test_objective_hcat_1dim ()
94+ model = Nonlinear. Model ()
95+ x1 = MOI. VariableIndex (1 )
96+ x2 = MOI. VariableIndex (2 )
97+ x3 = MOI. VariableIndex (3 )
98+ x4 = MOI. VariableIndex (4 )
99+ Nonlinear. set_objective (
100+ model,
101+ :(dot (hcat ([$ x1], [$ x3]), hcat ([$ x2], [$ x4]))),
102+ )
103+ evaluator = Nonlinear. Evaluator (model, ArrayDiff. Mode (), [x1, x2, x3, x4])
104+ MOI. initialize (evaluator, [:Grad ])
105+ sizes = evaluator. backend. objective. expr. sizes
106+ @test sizes. ndims == [0 , 2 , 1 , 0 , 1 , 0 , 2 , 1 , 0 , 1 , 0 ]
107+ @test sizes. size_offset == [0 , 6 , 5 , 0 , 4 , 0 , 2 , 1 , 0 , 0 , 0 ]
108+ @test sizes. size == [1 , 1 , 1 , 2 , 1 , 1 , 1 , 2 ]
109+ @test sizes. storage_offset == [0 , 1 , 3 , 4 , 5 , 6 , 7 , 9 , 10 , 11 , 12 , 13 ]
110+ x1 = 1.0
111+ x2 = 2.0
112+ x3 = 3.0
113+ x4 = 4.0
114+ println (MOI. eval_objective (evaluator, [x1, x2, x3, x4]))
115+ @test MOI. eval_objective (evaluator, [x1, x2, x3, x4]) == 14.0
116+ g = ones (4 )
117+ MOI. eval_objective_gradient (evaluator, g, [x1, x2, x3, x4])
118+ @test g == [2.0 , 1.0 , 4.0 , 3.0 ]
119+ return
120+ end
121+
67122function test_objective_norm_univariate ()
68123 model = Nonlinear. Model ()
69124 x = MOI. VariableIndex (1 )
110165
111166end # module
112167
113- TestArrayDiff. runtests ()
168+ TestArrayDiff. runtests ()
0 commit comments