Skip to content

Commit 47953f0

Browse files
committed
Add mock_test_generator
1 parent 99cd946 commit 47953f0

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed

test/mock_tests_generator.ipynb

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": null,
6+
"metadata": {},
7+
"outputs": [],
8+
"source": [
9+
"using SemidefiniteOptInterface\n",
10+
"const SDOI = SemidefiniteOptInterface\n",
11+
"\n",
12+
"using Base.Test\n",
13+
"\n",
14+
"using MathOptInterface\n",
15+
"const MOI = MathOptInterface\n",
16+
"const MOIT = MOI.Test\n",
17+
"const MOIB = MOI.Bridges\n",
18+
"const MOIU = MOI.Utilities"
19+
]
20+
},
21+
{
22+
"cell_type": "markdown",
23+
"metadata": {},
24+
"source": [
25+
"We hack the `optimize!` call of CSDP to print the `mock_optimize!` function to be used in the tests for the mock_optimizer.\n",
26+
"The output still needs to be edited and replaced by the exact solution but this is a good start"
27+
]
28+
},
29+
{
30+
"cell_type": "code",
31+
"execution_count": null,
32+
"metadata": {
33+
"collapsed": true
34+
},
35+
"outputs": [],
36+
"source": [
37+
"const MOIU = MOI.Utilities\n",
38+
"MOIU.@model SDModelData () (EqualTo, GreaterThan, LessThan) (Zeros, Nonnegatives, Nonpositives, PositiveSemidefiniteConeTriangle) () (SingleVariable,) (ScalarAffineFunction,) (VectorOfVariables,) (VectorAffineFunction,)"
39+
]
40+
},
41+
{
42+
"cell_type": "code",
43+
"execution_count": null,
44+
"metadata": {},
45+
"outputs": [],
46+
"source": [
47+
"import CSDP\n",
48+
"optimizer = CSDP.CSDPOptimizer(printlevel=0)\n",
49+
"\n",
50+
"cached_optimizer = MOIU.CachingOptimizer(SDModelData{Float64}(), optimizer)\n",
51+
"bridged_optimizer = MOIB.SplitInterval{Float64}(MOIB.RootDet{Float64}(MOIB.GeoMean{Float64}(MOIB.RSOCtoPSD{Float64}(MOIB.SOCtoPSD{Float64}(cached_optimizer)))))\n",
52+
"\n",
53+
"config = MOIT.TestConfig(atol=1e-4, rtol=1e-4)"
54+
]
55+
},
56+
{
57+
"cell_type": "code",
58+
"execution_count": null,
59+
"metadata": {},
60+
"outputs": [],
61+
"source": [
62+
"function MOI.optimize!(m::SDOI.SOItoMOIBridge)\n",
63+
" MOI.optimize!(m.sdoptimizer)\n",
64+
" X = SDOI.getX(m.sdoptimizer)\n",
65+
" println(\"MOIU.set_mock_optimize!(mock, (mock) -> MOIU.mock_optimize!(mock,\")\n",
66+
" print( \" \")\n",
67+
" if MOI.get(m, MOI.DualStatus()) == MOI.InfeasibilityCertificate\n",
68+
" print(\"tuple()\")\n",
69+
" else\n",
70+
" if MOI.get(m, MOI.PrimalStatus()) == MOI.InfeasibilityCertificate\n",
71+
" print(\"(MOI.InfeasibilityCertificate, \")\n",
72+
" end\n",
73+
" print( \"[\")\n",
74+
" for (blk, dim) in enumerate(m.blockdims)\n",
75+
" if blk > 1\n",
76+
" print(\", \")\n",
77+
" end\n",
78+
" #print(round.(SDOI.block(X, blk), 4))\n",
79+
" print(SDOI.block(X, blk))\n",
80+
" end\n",
81+
" print(\"]\")\n",
82+
" if MOI.get(m, MOI.PrimalStatus()) == MOI.InfeasibilityCertificate\n",
83+
" print(\")\")\n",
84+
" end\n",
85+
" end\n",
86+
" if MOI.get(m, MOI.PrimalStatus()) != MOI.InfeasibilityCertificate\n",
87+
" println(\",\")\n",
88+
" print( \" \")\n",
89+
" #print(round.(SDOI.gety(m.sdoptimizer), 4))\n",
90+
" print(SDOI.gety(m.sdoptimizer))\n",
91+
" end\n",
92+
" println(\"))\")\n",
93+
"end"
94+
]
95+
},
96+
{
97+
"cell_type": "code",
98+
"execution_count": null,
99+
"metadata": {},
100+
"outputs": [],
101+
"source": [
102+
"mock = SDOI.MockSDOptimizer{Float64}()\n",
103+
"mock_optimizer = SDOI.SDOIOptimizer(mock, Float64)\n",
104+
"cached_mock_optimizer = MOIU.CachingOptimizer(SDModelData{Float64}(), mock_optimizer)\n",
105+
"config = MOIT.TestConfig(atol=1e-4, rtol=1e-4)"
106+
]
107+
},
108+
{
109+
"cell_type": "code",
110+
"execution_count": null,
111+
"metadata": {},
112+
"outputs": [],
113+
"source": [
114+
"function generate_mock_test(testfun)\n",
115+
" testfun(bridged_optimizer, config)\n",
116+
" testcall = replace(string(testfun), \"MathOptInterface.Test\", \"MOIT\")\n",
117+
" println(\"$testcall(cached_mock_optimizer, config)\")\n",
118+
"end"
119+
]
120+
},
121+
{
122+
"cell_type": "code",
123+
"execution_count": null,
124+
"metadata": {},
125+
"outputs": [],
126+
"source": [
127+
"generate_mock_test(MOIT.solve_singlevariable_obj)"
128+
]
129+
},
130+
{
131+
"cell_type": "code",
132+
"execution_count": null,
133+
"metadata": {},
134+
"outputs": [],
135+
"source": [
136+
"for testfun in map(p -> p.second, sort(collect(MOIT.psdttests), by=p->p.first))\n",
137+
" generate_mock_test(testfun)\n",
138+
"end"
139+
]
140+
},
141+
{
142+
"cell_type": "code",
143+
"execution_count": null,
144+
"metadata": {
145+
"collapsed": true
146+
},
147+
"outputs": [],
148+
"source": []
149+
}
150+
],
151+
"metadata": {
152+
"kernelspec": {
153+
"display_name": "Julia 0.6.3",
154+
"language": "julia",
155+
"name": "julia-0.6"
156+
},
157+
"language_info": {
158+
"file_extension": ".jl",
159+
"mimetype": "application/julia",
160+
"name": "julia",
161+
"version": "0.6.4"
162+
}
163+
},
164+
"nbformat": 4,
165+
"nbformat_minor": 2
166+
}

0 commit comments

Comments
 (0)