@@ -13,8 +13,8 @@ using Test
1313using LinearAlgebra
1414import SparseArrays
1515import Random
16- import MathOptInterface
17- const MOI = MathOptInterface
16+ import MathOptInterface as MOI
17+ import LowRankOpt as LRO
1818import Hypatia
1919import Hypatia. Cones
2020
@@ -383,6 +383,37 @@ function test_moi_cones(T::Type{<:Real})
383383 @test MOI. dimension (moi_cone) == Cones. dimension (hyp_cone) == 3
384384 @test hyp_cone. Ps == Ps
385385
386+ @testset " LowRankOpt" begin
387+ P = Ps[1 ]
388+ moi_cone = LRO. SetDotProducts {LRO.WITHOUT_SET} (
389+ MOI. PositiveSemidefiniteConeTriangle (2 ),
390+ LRO. TriangleVectorization .([
391+ LRO. positive_semidefinite_factorization (P[1 , :]),
392+ LRO. positive_semidefinite_factorization (P[2 , :]),
393+ LRO. positive_semidefinite_factorization (P[3 , :]),
394+ ]),
395+ )
396+ hyp_cone = Hypatia. cone_from_moi (T, moi_cone)
397+ @test hyp_cone isa Cones. WSOSInterpNonnegative{T, T}
398+ @test MOI. dimension (moi_cone) == Cones. dimension (hyp_cone) == 3
399+ @test only (hyp_cone. Ps) == P
400+ @test hyp_cone. use_dual_barrier
401+
402+ moi_cone = LRO. LinearCombinationInSet {LRO.WITHOUT_SET} (
403+ MOI. PositiveSemidefiniteConeTriangle (2 ),
404+ LRO. TriangleVectorization .([
405+ LRO. positive_semidefinite_factorization (P[1 , :]),
406+ LRO. positive_semidefinite_factorization (P[2 , :]),
407+ LRO. positive_semidefinite_factorization (P[3 , :]),
408+ ]),
409+ )
410+ hyp_cone = Hypatia. cone_from_moi (T, moi_cone)
411+ @test hyp_cone isa Cones. WSOSInterpNonnegative{T, T}
412+ @test MOI. dimension (moi_cone) == Cones. dimension (hyp_cone) == 3
413+ @test only (hyp_cone. Ps) == P
414+ @test ! hyp_cone. use_dual_barrier
415+ end
416+
386417 Ps = [rand (Complex{T}, 4 , 3 ), rand (Complex{T}, 4 , 2 )]
387418 moi_cone = Hypatia. WSOSInterpNonnegativeCone {T, Complex{T}} (4 , Ps)
388419 hyp_cone = Hypatia. cone_from_moi (T, moi_cone)
0 commit comments