88# *Symmetry groups, semidefinite programs, and sums of squares*.
99# Journal of Pure and Applied Algebra 192.1-3 (2004): 95-128.
1010
11-
1211using Test # src
1312import Random # src
1413Random. seed! (0 ) # src
134133
135134# We can exploit this symmetry for reducing the problem using the `SymmetricIdeal` certificate as follows:
136135
137- import CSDP
136+ import Clarabel
138137function solve (G)
139- solver = CSDP . Optimizer
138+ solver = Clarabel . Optimizer
140139 model = Model (solver)
141140 @variable (model, t)
142141 @objective (model, Max, t)
@@ -148,37 +147,44 @@ function solve(G)
148147
149148
150149 g = gram_matrix (con_ref). blocks # src
151- @test length (g) == 5 # src
152- @test g[1 ]. basis. polynomials == [y^ 3 , x^ 2 * y, y] # src
153- @test g[2 ]. basis. polynomials == [- x^ 3 , - x* y^ 2 , - x] # src
154- for i in 1 : 2 # src
155- I = 3 : - 1 : 1 # src
156- Q = g[i]. Q[I, I] # src
157- @test size (Q) == (3 , 3 ) # src
158- @test Q[2 , 2 ] ≈ 1 rtol= 1e-2 # src
159- @test Q[1 , 2 ] ≈ 5 / 8 rtol= 1e-2 # src
160- @test Q[2 , 3 ] ≈ - 1 rtol= 1e-2 # src
161- @test Q[1 , 1 ] ≈ 25 / 64 rtol= 1e-2 # src
162- @test Q[1 , 3 ] ≈ - 5 / 8 rtol= 1e-2 # src
163- @test Q[3 , 3 ] ≈ 1 rtol= 1e-2 # src
164- end # src
165- @test length (g[3 ]. basis. polynomials) == 2 # src
166- @test g[3 ]. basis. polynomials[1 ] == 1.0 # src
167- @test g[3 ]. basis. polynomials[2 ] ≈ - (√ 2 / 2 )x^ 2 - (√ 2 / 2 )y^ 2 # src
168- @test size (g[3 ]. Q) == (2 , 2 ) # src
169- @test g[3 ]. Q[1 , 1 ] ≈ 7921 / 4096 rtol= 1e-2 # src
170- @test g[3 ]. Q[1 , 2 ] ≈ 0.983 rtol= 1e-2 # src
171- @test g[3 ]. Q[2 , 2 ] ≈ 1 / 2 rtol= 1e-2 # src
172- @test g[4 ]. basis. polynomials == [x * y] # src
173- @test size (g[4 ]. Q) == (1 , 1 ) # src
174- @test g[4 ]. Q[1 , 1 ] ≈ 0 atol= 1e-2 # src
175- @test length (g[5 ]. basis. polynomials) == 1 # src
176- @test g[5 ]. basis. polynomials[1 ] ≈ (√ 2 / 2 )x^ 2 - (√ 2 / 2 )y^ 2 # src
177- @test size (g[5 ]. Q) == (1 , 1 ) # src
178- @test g[5 ]. Q[1 , 1 ] ≈ 0 atol= 1e-2 # src
179- for g in gram_matrix (con_ref). blocks
180- println (g. basis. polynomials)
181- end
150+ @test length (g) == 4 # src
151+ @test length (g[4 ]. basis. bases) == 2 # src
152+ polys = g[4 ]. basis. bases[1 ]. elements # src
153+ @test length (polys) == 3 # src
154+ @test polys[1 ] ≈ y^ 3 # src
155+ @test polys[2 ] ≈ x^ 2 * y # src
156+ @test polys[3 ] ≈ y # src
157+ polys = g[4 ]. basis. bases[2 ]. elements # src
158+ @test length (polys) == 3 # src
159+ @test polys[1 ] ≈ - x^ 3 # src
160+ @test polys[2 ] ≈ - x* y^ 2 # src
161+ @test polys[3 ] ≈ - x # src
162+ I = 3 : - 1 : 1 # src
163+ Q = g[4 ]. Q[I, I] # src
164+ @test size (Q) == (3 , 3 ) # src
165+ @test Q[2 , 2 ] ≈ 1 rtol= 1e-2 # src
166+ @test Q[1 , 2 ] ≈ 5 / 8 rtol= 1e-2 # src
167+ @test Q[2 , 3 ] ≈ - 1 rtol= 1e-2 # src
168+ @test Q[1 , 1 ] ≈ 25 / 64 rtol= 1e-2 # src
169+ @test Q[1 , 3 ] ≈ - 5 / 8 rtol= 1e-2 # src
170+ @test Q[3 , 3 ] ≈ 1 rtol= 1e-2 # src
171+ polys = g[1 ]. basis. bases[]. elements # src
172+ @test length (polys) == 2 # src
173+ @test polys[1 ] ≈ 1.0 # src
174+ @test polys[2 ] ≈ - (√ 2 / 2 )x^ 2 - (√ 2 / 2 )y^ 2 # src
175+ @test size (g[1 ]. Q) == (2 , 2 ) # src
176+ @test g[1 ]. Q[1 , 1 ] ≈ 7921 / 4096 rtol= 1e-2 # src
177+ @test g[1 ]. Q[1 , 2 ] ≈ 0.983 rtol= 1e-2 # src
178+ @test g[1 ]. Q[2 , 2 ] ≈ 1 / 2 rtol= 1e-2 # src
179+ polys = g[2 ]. basis. bases[]. elements # src
180+ @test polys[] ≈ x * y # src
181+ @test size (g[2 ]. Q) == (1 , 1 ) # src
182+ @test g[2 ]. Q[1 , 1 ] ≈ 0 atol= 1e-2 # src
183+ polys = g[3 ]. basis. bases[]. elements # src
184+ @test polys[] ≈ (√ 2 / 2 )x^ 2 - (√ 2 / 2 )y^ 2 # src
185+ @test size (g[3 ]. Q) == (1 , 1 ) # src
186+ @test g[3 ]. Q[1 , 1 ] ≈ 0 atol= 1e-2 # src
187+ gram_matrix (con_ref)
182188end
183189solve (G)
184190
0 commit comments