scs 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/scs/ffi.rb +2 -0
  4. data/lib/scs/version.rb +1 -1
  5. data/vendor/scs/CITATION.cff +2 -2
  6. data/vendor/scs/CMakeLists.txt +136 -6
  7. data/vendor/scs/Makefile +53 -3
  8. data/vendor/scs/README.md +1 -1
  9. data/vendor/scs/include/cones.h +47 -2
  10. data/vendor/scs/include/glbopts.h +1 -1
  11. data/vendor/scs/include/scs.h +29 -0
  12. data/vendor/scs/include/scs_blas.h +4 -0
  13. data/vendor/scs/include/scs_types.h +3 -1
  14. data/vendor/scs/include/util_spectral_cones.h +45 -0
  15. data/vendor/scs/linsys/cpu/direct/private.c +3 -3
  16. data/vendor/scs/linsys/cpu/direct/private.h +2 -1
  17. data/vendor/scs/linsys/csparse.c +1 -1
  18. data/vendor/scs/linsys/cudss/direct/private.c +279 -0
  19. data/vendor/scs/linsys/cudss/direct/private.h +63 -0
  20. data/vendor/scs/linsys/external/qdldl/qdldl_types.h +1 -1
  21. data/vendor/scs/linsys/gpu/indirect/private.c +14 -21
  22. data/vendor/scs/scs.mk +17 -2
  23. data/vendor/scs/src/aa.c +8 -12
  24. data/vendor/scs/src/cones.c +783 -12
  25. data/vendor/scs/src/rw.c +15 -1
  26. data/vendor/scs/src/scs.c +4 -0
  27. data/vendor/scs/src/spectral_cones/logdeterminant/log_cone_IPM.c +660 -0
  28. data/vendor/scs/src/spectral_cones/logdeterminant/log_cone_Newton.c +279 -0
  29. data/vendor/scs/src/spectral_cones/logdeterminant/log_cone_wrapper.c +205 -0
  30. data/vendor/scs/src/spectral_cones/logdeterminant/logdet_cone.c +143 -0
  31. data/vendor/scs/src/spectral_cones/nuclear/ell1_cone.c +221 -0
  32. data/vendor/scs/src/spectral_cones/nuclear/nuclear_cone.c +99 -0
  33. data/vendor/scs/src/spectral_cones/sum-largest/sum_largest_cone.c +196 -0
  34. data/vendor/scs/src/spectral_cones/sum-largest/sum_largest_eval_cone.c +140 -0
  35. data/vendor/scs/src/spectral_cones/util_spectral_cones.c +52 -0
  36. data/vendor/scs/test/problems/complex_PSD.h +83 -0
  37. data/vendor/scs/test/rng.h +4 -4
  38. data/vendor/scs/test/run_tests.c +25 -0
  39. data/vendor/scs/test/spectral_cones_problems/exp_design.h +141 -0
  40. data/vendor/scs/test/spectral_cones_problems/graph_partitioning.h +275 -0
  41. data/vendor/scs/test/spectral_cones_problems/robust_pca.h +253 -0
  42. data/vendor/scs/test/spectral_cones_problems/several_logdet_cones.h +222 -0
  43. data/vendor/scs/test/spectral_cones_problems/several_nuc_cone.h +285 -0
  44. data/vendor/scs/test/spectral_cones_problems/several_sum_largest.h +420 -0
  45. metadata +21 -2
@@ -0,0 +1,253 @@
1
+ #include "glbopts.h"
2
+ #include "linalg.h"
3
+ #include "minunit.h"
4
+ #include "problem_utils.h"
5
+ #include "rw.h"
6
+ #include "scs.h"
7
+ #include "scs_matrix.h"
8
+ #include "util.h"
9
+
10
+ // for SpectralSCS
11
+ static const char *robust_pca(void) {
12
+ ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
13
+ ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
14
+ ScsSettings *stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
15
+ ScsSolution *sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
16
+ ScsInfo info = {0};
17
+ scs_int exitflag;
18
+ scs_float perr, derr;
19
+ scs_int success;
20
+ const char *fail;
21
+
22
+ /* data */
23
+ scs_float Ax[] = {
24
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
25
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
26
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
27
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
28
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
29
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
30
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
31
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
32
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
33
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
34
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
35
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
36
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
37
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
38
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
39
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
40
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
41
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
42
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
43
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
44
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
45
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
46
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
47
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
48
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
49
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
50
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
51
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
52
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
53
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
54
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
55
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
56
+ -1.};
57
+ scs_int Ai[] = {
58
+ 60, 61, 121, 60, 62, 122, 60, 63, 123, 60, 64, 124, 60, 65, 125,
59
+ 60, 66, 126, 60, 67, 127, 60, 68, 128, 60, 69, 129, 60, 70, 130,
60
+ 60, 71, 131, 60, 72, 132, 60, 73, 133, 60, 74, 134, 60, 75, 135,
61
+ 60, 76, 136, 60, 77, 137, 60, 78, 138, 60, 79, 139, 60, 80, 140,
62
+ 60, 81, 141, 60, 82, 142, 60, 83, 143, 60, 84, 144, 60, 85, 145,
63
+ 60, 86, 146, 60, 87, 147, 60, 88, 148, 60, 89, 149, 60, 90, 150,
64
+ 60, 91, 151, 60, 92, 152, 60, 93, 153, 60, 94, 154, 60, 95, 155,
65
+ 60, 96, 156, 60, 97, 157, 60, 98, 158, 60, 99, 159, 60, 100, 160,
66
+ 60, 101, 161, 60, 102, 162, 60, 103, 163, 60, 104, 164, 60, 105, 165,
67
+ 60, 106, 166, 60, 107, 167, 60, 108, 168, 60, 109, 169, 60, 110, 170,
68
+ 60, 111, 171, 60, 112, 172, 60, 113, 173, 60, 114, 174, 60, 115, 175,
69
+ 60, 116, 176, 60, 117, 177, 60, 118, 178, 60, 119, 179, 60, 120, 180,
70
+ 0, 61, 121, 1, 62, 122, 2, 63, 123, 3, 64, 124, 4, 65, 125,
71
+ 5, 66, 126, 6, 67, 127, 7, 68, 128, 8, 69, 129, 9, 70, 130,
72
+ 10, 71, 131, 11, 72, 132, 12, 73, 133, 13, 74, 134, 14, 75, 135,
73
+ 15, 76, 136, 16, 77, 137, 17, 78, 138, 18, 79, 139, 19, 80, 140,
74
+ 20, 81, 141, 21, 82, 142, 22, 83, 143, 23, 84, 144, 24, 85, 145,
75
+ 25, 86, 146, 26, 87, 147, 27, 88, 148, 28, 89, 149, 29, 90, 150,
76
+ 30, 91, 151, 31, 92, 152, 32, 93, 153, 33, 94, 154, 34, 95, 155,
77
+ 35, 96, 156, 36, 97, 157, 37, 98, 158, 38, 99, 159, 39, 100, 160,
78
+ 40, 101, 161, 41, 102, 162, 42, 103, 163, 43, 104, 164, 44, 105, 165,
79
+ 45, 106, 166, 46, 107, 167, 47, 108, 168, 48, 109, 169, 49, 110, 170,
80
+ 50, 111, 171, 51, 112, 172, 52, 113, 173, 53, 114, 174, 54, 115, 175,
81
+ 55, 116, 176, 56, 117, 177, 57, 118, 178, 58, 119, 179, 59, 120, 180,
82
+ 181, 0, 182, 1, 183, 2, 184, 3, 185, 4, 186, 5, 187, 6, 188,
83
+ 7, 189, 8, 190, 9, 191, 10, 192, 11, 193, 12, 194, 13, 195, 14,
84
+ 196, 15, 197, 16, 198, 17, 199, 18, 200, 19, 201, 20, 202, 21, 203,
85
+ 22, 204, 23, 205, 24, 206, 25, 207, 26, 208, 27, 209, 28, 210, 29,
86
+ 211, 30, 212, 31, 213, 32, 214, 33, 215, 34, 216, 35, 217, 36, 218,
87
+ 37, 219, 38, 220, 39, 221, 40, 222, 41, 223, 42, 224, 43, 225, 44,
88
+ 226, 45, 227, 46, 228, 47, 229, 48, 230, 49, 231, 50, 232, 51, 233,
89
+ 52, 234, 53, 235, 54, 236, 55, 237, 56, 238, 57, 239, 58, 240, 59,
90
+ 241};
91
+ scs_int Ap[] = {
92
+ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39,
93
+ 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81,
94
+ 84, 87, 90, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, 123,
95
+ 126, 129, 132, 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 165,
96
+ 168, 171, 174, 177, 180, 183, 186, 189, 192, 195, 198, 201, 204, 207,
97
+ 210, 213, 216, 219, 222, 225, 228, 231, 234, 237, 240, 243, 246, 249,
98
+ 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 285, 288, 291,
99
+ 294, 297, 300, 303, 306, 309, 312, 315, 318, 321, 324, 327, 330, 333,
100
+ 336, 339, 342, 345, 348, 351, 354, 357, 360, 361, 363, 365, 367, 369,
101
+ 371, 373, 375, 377, 379, 381, 383, 385, 387, 389, 391, 393, 395, 397,
102
+ 399, 401, 403, 405, 407, 409, 411, 413, 415, 417, 419, 421, 423, 425,
103
+ 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449, 451, 453,
104
+ 455, 457, 459, 461, 463, 465, 467, 469, 471, 473, 475, 477, 479, 481};
105
+
106
+ scs_float b[] = {
107
+ 1.00346258, 1.058972, 1.3338978, 0.95502671, 0.76639009, 0.61628772,
108
+ 1.42111113, 1.03841293, 0.44615864, 0.85861969, 0.90243625, 0.72213324,
109
+ 0.94699689, 0.81716838, 1.01510945, 0.13007678, 1.198153, 0.95044553,
110
+ 0.4949946, 1.07831368, 1.32720261, 1.07903274, 1.68375286, 1.27474549,
111
+ 1.18000824, 0.61398833, 1.82853889, 1.27952122, 0.75345835, 1.20492083,
112
+ 1.2038308, 1.03174759, 1.68585985, 1.11247234, 1.00162586, 0.62169897,
113
+ 1.69182118, 1.29236728, 0.59968048, 1.17087666, 0.39423923, 0.29843035,
114
+ 0.53155946, 0.40310646, 0.3583775, 0.18407451, 0.53328188, 0.34513123,
115
+ 0.26243805, 0.37141265, 0.72923936, 0.60496262, 0.78424416, 0.6510247,
116
+ 0.76451821, 0.16999683, 0.98700998, 0.79590066, 0.37119843, 0.86498628,
117
+ 0.58937813, 0., 0., 0., 0., 0.,
118
+ 0., 0., 0., 0., 0., 0.,
119
+ 0., 0., 0., 0., 0., 0.,
120
+ 0., 0., 0., 0., 0., 0.,
121
+ 0., 0., 0., 0., 0., 0.,
122
+ 0., 0., 0., 0., 0., 0.,
123
+ 0., 0., 0., 0., 0., 0.,
124
+ 0., 0., 0., 0., 0., 0.,
125
+ 0., 0., 0., 0., 0., 0.,
126
+ 0., 0., 0., 0., 0., 0.,
127
+ 0., 0., 0., 0., 0., 0.,
128
+ 0., 0., 0., 0., 0., 0.,
129
+ 0., 0., 0., 0., 0., 0.,
130
+ 0., 0., 0., 0., 0., 0.,
131
+ 0., 0., 0., 0., 0., 0.,
132
+ 0., 0., 0., 0., 0., 0.,
133
+ 0., 0., 0., 0., 0., 0.,
134
+ 0., 0., 0., 0., 0., 0.,
135
+ 0., 0., 0., 0., 0., 0.,
136
+ 0., 0., 0., 0., 0., 0.,
137
+ 0., 0., 0., 0., 0., 0.,
138
+ 0., 0., 0., 0., 0., 0.,
139
+ 0., 0., 0., 0., 0., 0.,
140
+ 0., 0., 0., 0., 0., 0.,
141
+ 0., 0., 0., 0., 0., 0.,
142
+ 0., 0., 0., 0., 0., 0.,
143
+ 0., 0., 0., 0., 0., 0.,
144
+ 0., 0., 0., 0., 0., 0.,
145
+ 0., 0., 0., 0., 0., 0.,
146
+ 0., 0., 0., 0., 0., 0.,
147
+ 0., 0.};
148
+ scs_float c[] = {
149
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
150
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
151
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
152
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
153
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
154
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
155
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
156
+ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
157
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
158
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
159
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
160
+
161
+ scs_int m = 242;
162
+ scs_int n = 181;
163
+
164
+ scs_int z = 60;
165
+ scs_int l = 121;
166
+ scs_int *q = SCS_NULL;
167
+ scs_int qsize = 0;
168
+ scs_int *s = SCS_NULL;
169
+ scs_int ssize = 0;
170
+ scs_int ep = 0;
171
+ scs_int ed = 0;
172
+ scs_float *p = SCS_NULL;
173
+ scs_int psize = 0;
174
+ scs_int *d_array = SCS_NULL;
175
+ scs_int dsize = 0;
176
+ scs_int nuc_m[] = {10};
177
+ scs_int nuc_n[] = {6};
178
+ scs_int nucsize = 1;
179
+ scs_int *ell1 = SCS_NULL;
180
+ scs_int ell1_size = 0;
181
+ scs_int *sl_n = SCS_NULL;
182
+ scs_int *sl_k = SCS_NULL;
183
+ scs_int sl_size = 0;
184
+
185
+ // computed using mosek (the input of Ax is truncated, and mosek solved
186
+ // the problem with the non-truncated data)
187
+ scs_float opt = 8.046737895443831;
188
+ /* end data */
189
+
190
+ d->m = m;
191
+ d->n = n;
192
+ d->b = b;
193
+ d->c = c;
194
+
195
+ d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
196
+
197
+ d->A->m = m;
198
+ d->A->n = n;
199
+ d->A->x = Ax;
200
+ d->A->i = Ai;
201
+ d->A->p = Ap;
202
+
203
+ k->z = z;
204
+ k->l = l;
205
+ k->q = q;
206
+ k->qsize = qsize;
207
+ k->s = s;
208
+ k->ssize = ssize;
209
+ k->ep = ep;
210
+ k->ed = ed;
211
+ k->p = p;
212
+ k->psize = psize;
213
+ k->d = d_array;
214
+ k->dsize = dsize;
215
+ k->nuc_m = nuc_m;
216
+ k->nuc_n = nuc_n;
217
+ k->nucsize = nucsize;
218
+ k->ell1 = ell1;
219
+ k->ell1_size = ell1_size;
220
+ k->sl_n = sl_n;
221
+ k->sl_k = sl_k;
222
+ k->sl_size = sl_size;
223
+
224
+ scs_set_default_settings(stgs);
225
+ stgs->eps_abs = 1e-7;
226
+ stgs->eps_rel = 1e-7;
227
+ stgs->eps_infeas = 1e-9;
228
+
229
+ exitflag = scs(d, k, stgs, sol, &info);
230
+
231
+ perr = SCS(dot)(d->c, sol->x, d->n) - opt;
232
+ derr = -SCS(dot)(d->b, sol->y, d->m) - opt;
233
+
234
+ scs_printf("primal obj error %4e\n", perr);
235
+ scs_printf("dual obj error %4e\n", derr);
236
+
237
+ success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
238
+
239
+ mu_assert("robust_pca: SCS failed to produce outputflag SCS_SOLVED", success);
240
+
241
+ fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
242
+ if (fail)
243
+ return fail;
244
+
245
+ /* kill data */
246
+ scs_free(d->A);
247
+ scs_free(k);
248
+ scs_free(stgs);
249
+ scs_free(d);
250
+ SCS(free_sol)(sol);
251
+
252
+ return fail;
253
+ }
@@ -0,0 +1,222 @@
1
+ #include "glbopts.h"
2
+ #include "linalg.h"
3
+ #include "minunit.h"
4
+ #include "problem_utils.h"
5
+ #include "rw.h"
6
+ #include "scs.h"
7
+ #include "scs_matrix.h"
8
+ #include "util.h"
9
+
10
+ // for SpectralSCS
11
+ static const char *several_logdet_cones(void) {
12
+ ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
13
+ ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
14
+ ScsSettings *stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
15
+ ScsSolution *sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
16
+ ScsInfo info = {0};
17
+ scs_int exitflag;
18
+ scs_float perr, derr;
19
+ scs_int success;
20
+ const char *fail;
21
+
22
+ /* data */
23
+ scs_float Ax[] = {
24
+ -1., -1., 1., -1., 1.,
25
+ -1., 3.24, 0.16, 1., 4.84,
26
+ 3.61, 1., 1., 0.04, 0.01,
27
+ 0.16, -1., 0.25455844, 0.84852814, 1.13137085,
28
+ 0.31112698, 1.07480231, -0.42426407, 2.12132034, 0.05656854,
29
+ -0.04242641, -0.50911688, -1., -6.61851947, 0.3959798,
30
+ 1.27279221, -2.17788889, 6.18011327, 2.12132034, 0.05656854,
31
+ -0.21213203, 0.84852814, -1., 0.50911688, 0.22627417,
32
+ -1.27279221, -6.22253967, -0.80610173, -0.28284271, 1.69705627,
33
+ -0.33941125, 0.05656854, -0.16970563, -1., -2.54558441,
34
+ -0.79195959, -2.40416306, 6.22253967, -1.34350288, 0.56568542,
35
+ -1.83847763, -0.22627417, 0.22627417, -0.11313708, -1.,
36
+ 0.01, 2.25, 0.64, 0.01, 0.16,
37
+ 0.09, 2.25, 0.04, 0.09, 0.81,
38
+ -1., -0.36769553, 1.48492424, 1.01823376, -0.09899495,
39
+ 1.30107648, -0.6363961, 0.05656854, 0.6363961, -1.90918831,
40
+ -1., 0.02828427, 0.84852814, -1.01823376, -0.28284271,
41
+ -0.16970563, 0.08485281, 2.54558441, -0.33941125, -0.16970563,
42
+ 0.38183766, -1., -0.14142136, -2.96984848, -1.92333044,
43
+ 0.28284271, -0.28284271, -0.16970563, -2.75771645, -0.22627417,
44
+ -0.67882251, 0.25455844, -1., 6.76, 0.49,
45
+ 0.81, 0.49, 5.29, 2.25, 0.04,
46
+ 2.25, 2.25, -1., -0.73539105, 0.3959798,
47
+ -1.14551299, 1.97989899, -0.97580736, -0.42426407, -0.33941125,
48
+ -0.84852814, -0.6363961, -1., 3.67695526, -1.38592929,
49
+ -2.16374675, -1.97989899, -1.6263456, 0.84852814, -0.22627417,
50
+ -3.39411255, -0.42426407, -1., 0.04, 0.16,
51
+ 0.81, 4., 0.09, 0.04, 1.44,
52
+ 1.44, 0.16, 0.09, -1., -0.28284271,
53
+ -0.79195959, 2.16374675, -5.65685425, 0.21213203, -0.11313708,
54
+ -2.20617316, 1.35764502, 0.90509668, 0.08485281, -1.,
55
+ 1., 1.96, 2.89, 4., 0.25,
56
+ 0.16, 1.69, 0.64, 2.56, 0.04,
57
+ -1., 3.24, 0.16, 1., 4.84,
58
+ 3.61, 1., 1., 0.04, 0.01,
59
+ 0.16, -1., 0.25455844, 0.84852814, 1.13137085,
60
+ 0.31112698, 1.07480231, -0.42426407, 2.12132034, 0.05656854,
61
+ -0.04242641, -0.50911688, -1., -6.61851947, 0.3959798,
62
+ 1.27279221, -2.17788889, 6.18011327, 2.12132034, 0.05656854,
63
+ -0.21213203, 0.84852814, -1., 0.50911688, 0.22627417,
64
+ -1.27279221, -6.22253967, -0.80610173, -0.28284271, 1.69705627,
65
+ -0.33941125, 0.05656854, -0.16970563, -1., -2.54558441,
66
+ -0.79195959, -2.40416306, 6.22253967, -1.34350288, 0.56568542,
67
+ -1.83847763, -0.22627417, 0.22627417, -0.11313708, -1.,
68
+ 0.01, 2.25, 0.64, 0.01, 0.16,
69
+ 0.09, 2.25, 0.04, 0.09, 0.81,
70
+ -1., -0.36769553, 1.48492424, 1.01823376, -0.09899495,
71
+ 1.30107648, -0.6363961, 0.05656854, 0.6363961, -1.90918831,
72
+ -1., 0.02828427, 0.84852814, -1.01823376, -0.28284271,
73
+ -0.16970563, 0.08485281, 2.54558441, -0.33941125, -0.16970563,
74
+ 0.38183766, -1., -0.14142136, -2.96984848, -1.92333044,
75
+ 0.28284271, -0.28284271, -0.16970563, -2.75771645, -0.22627417,
76
+ -0.67882251, 0.25455844, -1., 6.76, 0.49,
77
+ 0.81, 0.49, 5.29, 2.25, 0.04,
78
+ 2.25, 2.25, -1., -0.73539105, 0.3959798,
79
+ -1.14551299, 1.97989899, -0.97580736, -0.42426407, -0.33941125,
80
+ -0.84852814, -0.6363961, -1., 3.67695526, -1.38592929,
81
+ -2.16374675, -1.97989899, -1.6263456, 0.84852814, -0.22627417,
82
+ -3.39411255, -0.42426407, -1., 0.04, 0.16,
83
+ 0.81, 4., 0.09, 0.04, 1.44,
84
+ 1.44, 0.16, 0.09, -1., -0.28284271,
85
+ -0.79195959, 2.16374675, -5.65685425, 0.21213203, -0.11313708,
86
+ -2.20617316, 1.35764502, 0.90509668, 0.08485281, -1.,
87
+ 1., 1.96, 2.89, 4., 0.25,
88
+ 0.16, 1.69, 0.64, 2.56, 0.04,
89
+ -1.};
90
+ scs_int Ai[] = {
91
+ 12, 29, 0, 13, 1, 30, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 2,
92
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 2, 3, 4, 5, 6, 7, 9, 10,
93
+ 11, 16, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 17, 2, 3, 4, 5, 6,
94
+ 7, 8, 9, 10, 11, 18, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 19, 2,
95
+ 3, 4, 5, 6, 7, 9, 10, 11, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10,
96
+ 11, 21, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 22, 2, 3, 4, 5, 6,
97
+ 7, 9, 10, 11, 23, 2, 3, 4, 5, 6, 7, 9, 10, 11, 24, 2, 3, 4,
98
+ 5, 6, 7, 9, 10, 11, 25, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 26,
99
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 27, 2, 3, 4, 5, 6, 7, 8,
100
+ 9, 10, 11, 28, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 31, 2, 3, 4,
101
+ 5, 6, 7, 8, 9, 10, 11, 32, 2, 3, 4, 5, 6, 7, 9, 10, 11, 33,
102
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 34, 2, 3, 4, 5, 6, 7, 8,
103
+ 9, 10, 11, 35, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 36, 2, 3, 4,
104
+ 5, 6, 7, 9, 10, 11, 37, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 38,
105
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 39, 2, 3, 4, 5, 6, 7, 9,
106
+ 10, 11, 40, 2, 3, 4, 5, 6, 7, 9, 10, 11, 41, 2, 3, 4, 5, 6,
107
+ 7, 9, 10, 11, 42, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 43, 2, 3,
108
+ 4, 5, 6, 7, 8, 9, 10, 11, 44, 2, 3, 4, 5, 6, 7, 8, 9, 10,
109
+ 11, 45};
110
+ scs_int Ap[] = {0, 1, 2, 4, 6, 17, 28, 38, 49, 60, 71, 81,
111
+ 92, 103, 113, 123, 133, 144, 155, 166, 177, 188, 198, 209,
112
+ 220, 231, 241, 252, 263, 273, 283, 293, 304, 315, 326};
113
+
114
+ scs_float b[] = {1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
115
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
116
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
117
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
118
+ scs_float c[] = {1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
119
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
120
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
121
+ scs_int m = 46;
122
+ scs_int n = 34;
123
+
124
+ scs_int z = 2;
125
+ scs_int l = 10;
126
+ scs_int *q = SCS_NULL;
127
+ scs_int qsize = 0;
128
+ scs_int *s = SCS_NULL;
129
+ scs_int ssize = 0;
130
+ scs_int ep = 0;
131
+ scs_int ed = 0;
132
+ scs_float *p = SCS_NULL;
133
+ scs_int psize = 0;
134
+ scs_int d_array[] = {5, 5};
135
+ scs_int dsize = 2;
136
+ scs_int *nuc_m = SCS_NULL;
137
+ scs_int *nuc_n = SCS_NULL;
138
+ scs_int nucsize = 0;
139
+ scs_int *ell1 = SCS_NULL;
140
+ scs_int ell1_size = 0;
141
+ scs_int *sl_n = SCS_NULL;
142
+ scs_int *sl_k = SCS_NULL;
143
+ scs_int sl_size = 0;
144
+
145
+ // computed using mosek (the input of Ax is truncated, and mosek solved
146
+ // the problem with the non-truncated data)
147
+ scs_float opt = 24.097175949228443;
148
+ /* end data */
149
+
150
+ d->m = m;
151
+ d->n = n;
152
+ d->b = b;
153
+ d->c = c;
154
+
155
+ d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
156
+
157
+ d->A->m = m;
158
+ d->A->n = n;
159
+ d->A->x = Ax;
160
+ d->A->i = Ai;
161
+ d->A->p = Ap;
162
+
163
+ k->z = z;
164
+ k->l = l;
165
+ k->q = q;
166
+ k->qsize = qsize;
167
+ k->s = s;
168
+ k->ssize = ssize;
169
+ k->ep = ep;
170
+ k->ed = ed;
171
+ k->p = p;
172
+ k->psize = psize;
173
+ k->d = d_array;
174
+ k->dsize = dsize;
175
+ k->nuc_m = nuc_m;
176
+ k->nuc_n = nuc_n;
177
+ k->nucsize = nucsize;
178
+ k->ell1 = ell1;
179
+ k->ell1_size = ell1_size;
180
+ k->sl_n = sl_n;
181
+ k->sl_k = sl_k;
182
+ k->sl_size = sl_size;
183
+
184
+ scs_set_default_settings(stgs);
185
+ stgs->eps_abs = 1e-7;
186
+ stgs->eps_rel = 1e-7;
187
+ stgs->eps_infeas = 1e-9;
188
+
189
+ stgs->log_csv_filename = "several_logdet_cone.csv";
190
+ exitflag = scs(d, k, stgs, sol, &info);
191
+
192
+ perr = SCS(dot)(d->c, sol->x, d->n) - opt;
193
+ derr = -SCS(dot)(d->b, sol->y, d->m) - opt;
194
+
195
+ success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
196
+
197
+ mu_assert("several_logdet_cones: SCS failed to produce outputflag SCS_SOLVED",
198
+ success);
199
+
200
+ fail = 0;
201
+ // TODO: This test fails because of the complementary slackness check.
202
+ // The complementary slackness tolerance is a bit too tight.
203
+ // fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
204
+ // if (fail)
205
+ // return fail;
206
+
207
+ mu_assert("several logdet cones: primal feas error ",
208
+ ABS(info.res_pri) < 5 * 1e-6);
209
+ mu_assert("several logdet cones: dual feas error ",
210
+ ABS(info.res_dual) < 1e-6);
211
+ mu_assert("several logdet cones: duality gap error ",
212
+ ABS(info.gap) < 5 * 1e-6);
213
+
214
+ /* kill data */
215
+ scs_free(d->A);
216
+ scs_free(k);
217
+ scs_free(stgs);
218
+ scs_free(d);
219
+ SCS(free_sol)(sol);
220
+
221
+ return fail;
222
+ }